java设计模式之 代理模式( 五 )


cglib 创建某个类A的动态代理类的模式是:
查找A上的所有非final 的类型的方法定义;将这些方法的定义转换成字节码;将组成的字节码转换成相应的代理的class对象;实现 接口 , 用来处理 对代理类上所有方法的请求(这个接口和JDK动态代理的功能和角色是一样的)
引入cglib的maven依赖:
cglibcglib3.2.4
package com.lbl.proxy;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;//1.具体主题public class Train{public void move(){System.out.println("火车行驶中…");}}//2.生成代理class CGLibProxy implements MethodInterceptor {private Enhancer enhancer = new Enhancer();public Object getProxy(Class clazz){enhancer.setSuperclass(clazz);enhancer.setCallback(this);return enhancer.create();}/** * 拦截所有目标类方法的调用 * 参数: * obj目标实例对象 *method 目标方法的反射对象 * args方法的参数 * proxy代理类的实例 */public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {//代理类调用父类的方法System.out.println("日志开始");proxy.invokeSuper(obj, args);System.out.println("日志结束");return null;}}//3.测试class Test4 {public static void main(String[] args) {CGLibProxy proxy = new CGLibProxy();Train t = (Train) proxy.getProxy(Train.class);t.move();}}
输出结果:
日志开始火车行驶中…日志结束
中的代理 参考资料
模拟JDK动态代理 ; 自己动手模拟实现java动态代理
Java动态代理机制详解(JDK 和CGLIB ,  , ASM)
Java设计模式——代理模式实现及原理