JDK动态代理Demo
2017-06-23 17:20
253 查看
JDK动态代理Demo需要几样东西:
被代理类
被代理类实现的接口
代理类
测试类
被代理类实现的接口
被代理类
代理类
测试类
运行结果
总结:JDK动态代理是接口动态代理,被代理类需要实现接口,且只有接口中存在的方法才可以被代理.通过classloader来加载代理类的字节码,使用反射最终执行被代理类的被代理方法.
ps:因为是使用的反射机制执行,所以在性能上不高.
被代理类
被代理类实现的接口
代理类
测试类
被代理类实现的接口
package java_jdk_proxy; public interface Person { public void say(); public void eat(); }
被代理类
package java_jdk_proxy; public class PersonImpl implements Person { @Override public void say() { System.out.println("person say .. "); } @Override public void eat() { System.out.println("person eat .. "); } }
代理类
package java_jdk_proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ProxyHandler implements InvocationHandler { public Object target; // 被代理对象 public ProxyHandler(Object tar) { this.target = tar; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("befor proxy.."); Object result = method.invoke(target, args); System.out.println("after proxy.."); System.out.println("============"); return result; } }
测试类
package java_jdk_proxy; import java.lang.reflect.Proxy; public class ProxyTest { public static void main(String[] args) { PersonImpl personImpl = new PersonImpl(); ProxyHandler handler = new ProxyHandler(personImpl); Person proxy = (Person) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), PersonImpl.class.getInterfaces(), handler); proxy.say(); proxy.eat(); } }
运行结果
befor proxy.. person say .. after proxy.. ============ befor proxy.. person eat .. after proxy.. ============
总结:JDK动态代理是接口动态代理,被代理类需要实现接口,且只有接口中存在的方法才可以被代理.通过classloader来加载代理类的字节码,使用反射最终执行被代理类的被代理方法.
ps:因为是使用的反射机制执行,所以在性能上不高.
相关文章推荐
- jdk动态代理技术demo(干货)
- Core Java:使用java.lang.reflect实现JDK动态代理的小DEMO
- 实现动态代理的两种方式介绍+例子demo(JDK、CGlib)
- 代理模式-动态代理Demo(JDK自带的动态代理)
- 关于JDK动态代理的小demo
- jdk动态代理和cglib代理demo及总结
- java代理Demo——JDK动态代理
- JDK和Cglib动态代理小demo
- JDK动态代理--Demo
- JDK的动态代理机制
- Sping-AOP:cglib动态代理与JDK动态代理的区别
- AOP的底层实现--JDK动态代理,CGLIB动态代理
- JDK动态代理模式
- Java动态代理(JDK和cglib)
- java代理模式详解之jdk动态代理
- AOP之JDK动态代理和CGLIB代理的区别
- 自己用JDK动态代理写一个基本数据库连接池
- JDK和CGLIB动态代理实践
- JDK动态代理实现原理
- 代理模式之jdk动态代理