You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trae1/AdvancedDynamicProxy.java

45 lines
1.2 KiB

import java.lang.reflect.*;
// 业务接口
interface UserService {
String getUser(int id);
}
// 真实业务类
class UserServiceImpl implements UserService {
public String getUser(int id) {
return "User-" + id;
}
}
// 动态代理处理器
class LoggingProxyHandler implements InvocationHandler {
private Object target;
public LoggingProxyHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After method: " + method.getName());
return result;
}
}
// 客户端使用
public class AdvancedDynamicProxy {
public static void main(String[] args) {
UserService realService = new UserServiceImpl();
UserService proxyInstance = (UserService) Proxy.newProxyInstance(
UserService.class.getClassLoader(),
new Class[]{UserService.class},
new LoggingProxyHandler(realService)
);
System.out.println(proxyInstance.getUser(101));
}
}