JDK动态代理
2017-01-07 10:32
381 查看
InvocationHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//实现InvocationHandler接口
public class ProxyInvocationHandler implements InvocationHandler {
private Object target; //接口
public void setTarget(Object target) {
this.target = target;
}
//返回指定接口的代理类的实现类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
}
/*
* proxy是代理类
* method是代理类的调用处理程序的方法对象
* 调用代理类实例的处理方法时,其实就是调用invoke方法
* */
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
for(Object arg:args){ //方法执行的参数
System.out.println(arg);
}
log(method.getName());
Object result = method.invoke(target, args);
return result;
}
public void log(String methodName){
System.out.println("执行"+methodName+"方法");
}
}
Client.java
public class Client {
public static void main(String[] args) {
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setTarget(new ArrayList());
List list = (List)pih.getProxy();//生成代理类
list.add("aaa"); //会调用InvocationHandler中的invoke方法
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//实现InvocationHandler接口
public class ProxyInvocationHandler implements InvocationHandler {
private Object target; //接口
public void setTarget(Object target) {
this.target = target;
}
//返回指定接口的代理类的实现类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
}
/*
* proxy是代理类
* method是代理类的调用处理程序的方法对象
* 调用代理类实例的处理方法时,其实就是调用invoke方法
* */
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
for(Object arg:args){ //方法执行的参数
System.out.println(arg);
}
log(method.getName());
Object result = method.invoke(target, args);
return result;
}
public void log(String methodName){
System.out.println("执行"+methodName+"方法");
}
}
Client.java
public class Client {
public static void main(String[] args) {
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setTarget(new ArrayList());
List list = (List)pih.getProxy();//生成代理类
list.add("aaa"); //会调用InvocationHandler中的invoke方法
}
}
相关文章推荐
- JAVA动态代理(JDK和CGLIB)
- Dynamic Proxy(JDK自带的动态代理实现)
- 【转载】MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- JDK的动态代理
- JDK动态代理小例子
- Spring之JDK动态代理和cgLib的区别
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- JDK解构 - Java中的引用和动态代理的实现
- java动态代理(JDK和cglib)
- JDK动态代理的简单实现
- Java基础学习总结(109)——Jdk动态代理和cglib动态代理总结
- Java反射之JDK动态代理实现简单AOP
- 重温Spring之旅5——AOP代理对象、JDK动态代理、使用cglib生产代理
- JDK动态代理实现的思考
- JDK的动态代理深入解析(Proxy,InvocationHandler)
- JDK动态代理与CGLIB动态代理
- AOP思想个人理解以及实战静态代理、JDK动态代理、CGlib动态代理
- Java动态代理(JDKProxy与CGlibProxy)
- 模拟JDK动态代理 ; 自己动手模拟实现java动态代理
- JDK动态代理