cglib 创建某个类A的动态代理类的模式是:
查找A上的所有非final 的类型的方法定义;将这些方法的定义转换成字节码;将组成的字节码转换成相应的代理的class对象;实现 接口 , 用来处理 对代理类上所有方法的请求(这个接口和JDK动态代理的功能和角色是一样的)
引入cglib的maven依赖:
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设计模式——代理模式实现及原理
- 虹之玉养殖时有哪些注意事项
- [附源码]Java计算机毕业设计SSM翻转课堂微视频管理系统
- java null
- ARM单片机工程之间的切换
- Object javascript基础--对象封装
- 09-06 周二 Python之KNN算法的实现
- 刨析源码,深层讲解 Java-集合框架
- Android 自定义绘制之文字测量知识点
- 三 电系魔法师成长之路—仪器仪表学习设计一个五倍共射放大器
- 建立编程思想 Java 2.0--基础阶段