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.
45 lines
1.2 KiB
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));
|
|
}
|
|
} |