Java动态代理实例
来源:互联网 发布:信长野望长野业正数据 编辑:程序博客网 时间:2024/05/21 09:52
静态代理:特征是代理类和目标对象的类都是在编译期间确定下来的,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。
最好可以通过一个代理类完成全部的代理功能。
动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象。
代理设计模式的原理:
使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
/** * 静态代理模式 *///接口interface ClothFactory { void productCloth();}//被代理类class NikeClothFactory implements ClothFactory{ public void productCloth() { System.out.println("Nike Factory!"); }}//代理类class ProxyFactory implements ClothFactory{ ClothFactory cf; //创建代理类的对象时,实际传入一个被代理类的对象 public ProxyFactory(ClothFactory cf) { this.cf = cf; } public void productCloth() { System.out.println("代理类开始执行!"); cf.productCloth(); }}public class TestClothProduct { public static void main(String[] args) { NikeClothFactory nike = new NikeClothFactory(); //创建被代理类的对象 ProxyFactory proxy = new ProxyFactory(nike); //创建代理类的对象 proxy.productCloth(); }}
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 动态代理的使用 */interface Subject { void action();}//被代理类class RealSubject implements Subject { public void action() { System.out.println("我是被代理类!"); }}//class MyInvocationHander implements InvocationHandler{ Object obj; // 实现了接口的被代理类的对象的声明 //1.给被代理的对象实例化;2.返回一个代理类的对象 public Object blind(Object obj) { this.obj = obj; return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } //当通过代理类的对象发起对被重写的方法调用时,都会转换为对如下的invoke方法的调用 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //method方法的返回值是returnVal Object returnVal = method.invoke(obj, args); return returnVal; }}public class TestProxy { public static void main(String[] args) { //1.被代理类的对象 RealSubject real = new RealSubject(); //2.创建一个实现了InvocationHandler接口类的对象 MyInvocationHander hander = new MyInvocationHander(); //3.调用blind()方法,动态的返回一个同样实现了real所在类的实现的接口Subject的代理类的对象 Object obj = hander.blind(real); Subject sub = (Subject)obj; //此时的sub就是代理类的对象 sub.action(); //转到对InvocationHandler接口的实现类的invoke()的调用 //再举一个例子 NikeClothFactory nike = new NikeClothFactory(); ClothFactory proxyCloth = (ClothFactory) hander.blind(nike); // proxyCloth即为代理类的对象 proxyCloth.productCloth(); }}
阅读全文
0 0
- java动态代理实例
- java动态代理实例
- java动态代理实例
- JAVA动态代理实例
- Java动态代理实例
- Java 动态代理实例
- Java 动态代理实例
- java动态代理简单实例
- java cglib动态代理 实例
- java动态代理简单实例。
- java动态代理简单实例
- java动态代理【简单实例】
- Java静态代理、动态代理实例
- Java静态代理、动态代理实例
- Java动态代理模式(Proxy)实例
- java动态代理对象实例的创建
- Java反射机制和动态代理实例
- Java代理(jdk静态代理、动态代理和cglib动态代理)实例及总结
- python网络
- Halcon算子参考
- Ubuntu资源查看
- UISegmentControl 分段控制器
- 【Python】5“条件判断和循环“
- Java动态代理实例
- python udp编程知识
- 最长公共子串/动态规划实现
- .net蚂蚁金服支付宝手机网站支付接口记录
- 机器学习之梯度下降法数学推导--回归
- 十二经络的值班表
- tcp编程
- jdbc通过hive server2访问hive
- mysql必知必会pdf