代理模式之jdk动态代理
2017-07-29 23:01
267 查看
之前我们分享了一篇静态代理,今天分享一下我对动态代理的理解
=====相关链接====
想了解静态代理的同学请点击幽暗城传送门
静态代理有两种实现方式,同样动态代理也有两种,分别是通过jdk和cglib来实现,下面我们分别来说下两者的实现方式
jdk代理:只能代理实现了接口的类,没有实现接口的类不能实现动态代理,看下面代码
行驶时间代理类
Moveable类
测试类
=====相关链接====
想了解静态代理的同学请点击幽暗城传送门
静态代理有两种实现方式,同样动态代理也有两种,分别是通过jdk和cglib来实现,下面我们分别来说下两者的实现方式
jdk代理:只能代理实现了接口的类,没有实现接口的类不能实现动态代理,看下面代码
行驶时间代理类
public class TimeHandler implements InvocationHandler { public TimeHandler(Object target){ super(); this.target = target; } private Object target; /** * auth wangsongyan * @param proxy 被代理对象 * @param method 被代理对象的方法 * @param args 方法的参数 * @return Object 方法的返回值 * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long starttime = System.currentTimeMillis(); System.out.println("汽车开始行驶"); method.invoke(target); long endtime = System.currentTimeMillis(); System.out.println("汽车结束行驶,行驶时间:" + (endtime - starttime ) +"毫秒"); return null; } }日志代理类
public class LogHandler implements InvocationHandler { public LogHandler(Object target) { super(); this.target = target; } private Object target; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("发信息给老婆说正在开车"); method.invoke(target); System.out.println("发信息告诉老婆到家了下车了"); return null; } }
Moveable类
public interface Moveable { void move(); void stop(); }
测试类
public class Test { public static void main(String[] args) { Car car = new Car(); InvocationHandler timeHandler = new TimeHandler(car); Class<?> cls = car.getClass(); /** * loader 类加载器 * interfaces 实现接口 * h InvocationHandler */ Moveable m = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), timeHandler); LogHandler logHandler = new LogHandler(m); Moveable m1 = (Moveable)Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), logHandler); m1.move(); } }我们这里用的是jdk的Proxy类实现的,这里要求的是代理类必须都实现同一接口,由于cglib动态代理东西比较多,所以不在这篇分享中写出,后面会继续分享cglib是如何实现动态代理的
相关文章推荐
- 模式的秘密-代理模式(2)-JDK动态代理
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- 代理模式,JDK动态代理
- 动态代理模式之JDk动态代理(四)
- JDK动态代理模式
- Java 代理模式:静态代理、JDK 动态代理和 Cglib 动态代理的区别
- 代理模式-JDK动态代理
- 深入理解代理模式:静态代理与JDK动态代理
- 代理模式:利用JDK原生动态实现AOP
- 设计模式之代理模式(静态代理、JDK动态代理和cglib动态代理)
- 设计模式(2)--java动态代理及jdk和cglib的区别
- Aop应用原理 JDK动态代理、代理模式与反射
- 常用设计模式之动态代理1(JDK)
- jdk动态代理模式的原理解析
- 设计模式——代理模式(静态代理和JDK、CGLib动态代理)
- 设计模式之动态代理(Java的JDK动态代理实现)
- java与设计模式(五)-jdk动态代理模式
- 代理模式之jdk动态代理
- 代理模式,JDK动态代理,SpringAOP来龙去脉
- 动态代理的模式-jdk方式