JDK动态代理Demo
来源:互联网 发布:舍恩伯格大数据思维 编辑:程序博客网 时间:2024/06/05 12:02
JDK动态代理Demo需要几样东西:
- 被代理类
- 被代理类实现的接口
- 代理类
- 测试类
被代理类实现的接口
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:因为是使用的反射机制执行,所以在性能上不高.
阅读全文
0 0
- JDK动态代理--Demo
- JDK动态代理Demo
- JDK和Cglib动态代理小demo
- jdk动态代理技术demo(干货)
- 关于JDK动态代理的小demo
- java代理Demo——JDK动态代理
- jdk动态代理和cglib代理demo及总结
- 代理模式-动态代理Demo(JDK自带的动态代理)
- Java动态代理Demo
- java动态代理demo
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- 微信小程序实战篇-分类页面制作
- 如何从wireshark中获取H264码流
- redis后台启动
- sql根据时间查询当天-昨天记录
- springmvc使用注解方式设置定时器
- JDK动态代理Demo
- MySql检测阻塞,锁等待sql
- WLFUploadButton
- 《深入理解mybatis原理》 MyBatis的二级缓存的设计原理
- java list remove(i)
- Zookeeper-Zookeeper可以干什么
- Percona Server (IMPROVED BUFFER POOL SCALABILITY)
- 大数据导出到excel
- shiro cas 遇到 票根验证问题