-
智能引用代理查看全部
-
保护代理查看全部
-
虚拟代理查看全部
-
远程代理查看全部
-
代理模式分类: 远程代理,虚拟代理,职能代理,保护代理查看全部
-
代理模式基本概念查看全部
-
代理模式定义:为其他对象提供一种代理以控制对这个对象的访问查看全部
-
动态代理步骤查看全部
-
本节看不太懂查看全部
-
本节看不太懂查看全部
-
*静态代理:代理和被代理对象在代理之前是确定的,实现了相同的接口或抽象类 *静态代理实现方式:继承和聚合 *继承:创建一个类(代理类)继承被代理类(实现相同的接口),在代理类中调用父类的被代理方法,在方法的前后增加代理的业务逻辑 *聚合:一个类中调用另一个类的对象(两者实现相同接口)。在代理类中声明被代理类的对象,并通过构造方法将对象传进来(初始化)。在代理类的接口方法中调用被代理类对象的方法,并在方法前后增加相应代理业务逻辑。查看全部
-
测试代理类 Car car=new Car(); InvocationHandler handler=new TimeHandler(car);//为car对象设置代理 Class<?> carClass= car.getClass(); //获取被代理类的类类型 /** * 使用Proxy.newInstance * 三个参数 * 1. 被代理类的类加载器 * 2. 被代理类的所有接口 类类型 * 3. InvocationHandler 实现了InvocationHandler接口的对象 */ Moveable moveable= (Moveable) Proxy.newProxyInstance(carClass.getClassLoader(), carClass.getInterfaces(), handler); moveable.move();查看全部
-
JDK实现动态代理,即可以为任何对象增加功能 示例:代理类的实现 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** *使用jdk提供的invocationHandler接口实现动态代理 * 实现对任何类(不仅限于Moveable)的记录时间操作。 */ public class TimeHandler implements InvocationHandler { private Object target; //定义一个Object,代表被代理的对象 public TimeHandler(Object target) { this.target=target; } /** * 1. 实现InvocationHandler接口,并重写invoke方法 * @param proxyObj 生成的代理对象。 * @param method 要代理的方法 * @param args 代理方法的参数 * @return 代理方法返回的返回值 */ @Override public Object invoke(Object proxyObj, Method method, Object[] args) throws Throwable { long start = System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); Object returnObj= method.invoke(target); //执行原有方法。如果方法有参数,作为invoke第二参数传入 long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); return returnObj; //将被代理方法的返回值返回。 } }查看全部
-
静态代理----使用聚合(组合)方式 /** * 使用 聚合方式 实现代理 * 优点:比较灵活(推荐使用),比如:可以任意改变顺序 */ public class CarTimeProxy implements Moveable { private Moveable car; //声明一个要代理的对象 public CarTimeProxy(Moveable car) { this.car = car; } /** * 代理该对象,实现记录时间 */ @Override public void move() { long start = System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); car.move(); long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); } }查看全部
-
静态代理---继承方式 实现代理 /** * 使用继承的方式为车对象实现代理方式 * 缺点:不够灵活,比如:如果要增加代理,而这些代理的先后顺序不确定。就要构建出很多代理类。 */ public class CarTimeProxy extends Car { /** * 重写父类的move方法。在前后增加 记录时间 代码,实现汽车代理 */ @Override public void move() { long start=System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); super.move();//执行父类执行的函数 long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); } }查看全部
举报
0/150
提交
取消