Java的CGLib动态代理
来源:互联网 发布:中控iface702软件下载 编辑:程序博客网 时间:2024/04/27 13:49
CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,并顺势织入横切逻辑。
public class BookFacadeImpl { public void addBook() { System.out.println("增加图书方法。。。"); } }
import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; /** * 使用cglib动态代理 */ public class BookFacadeCglib implements MethodInterceptor { private Object target; /** * 创建代理对象 * @param target * @return */ public Object getInstance(Object target) { this.target = target; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(this.target.getClass()); // 设置需要创建子类的类 // 回调方法 enhancer.setCallback(this); // 通过字节码技术动态创建子类实例 return enhancer.create(); } @Override // 回调方法 ,拦截所有的父类方法调用 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("事物开始"); Object result = proxy.invokeSuper(obj, args); // 通过代码类调用父类中的方法 System.out.println("事物结束"); return result; } }
BookFacadeCglib cglib=new BookFacadeCglib(); BookFacadeImpl bookCglib=(BookFacadeImpl)cglib.getInstance(new BookFacadeImpl()); bookCglib.addBook();
最终运行的结果如下:
事物开始增加图书方法。。。事物结束
注意加入cglib和asm的jar包,如不加asm包会报出如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
CGGlib创建的代理对象要比JDK的性能高很多,但是创建时所花费的时间却比JDK动态代理要多。所以对于singleton的代理对象或者具有实例池的代码,由于无须频繁创建代码对象,用CGLib比较合适。
也就是生命周期长的实例用CGLib比较合适。
0 0
- Java的CGLib动态代理
- java 代理模式 CGLIB的动态代理
- 【Java】CGlib动态代理
- Java-CGLib动态代理
- CGLib动态代理 java
- Java动态代理--cglib代理
- JAVA的动态代理 VS CGLIB
- JAVA的动态代理 (jdk和cglib)
- CGlib与Java Proxy的动态代理
- cglib的动态代理
- Cglib的动态代理
- 细说java动态代理和cglib的动态代理
- java动态代理和cglib动态代理的整合工具
- java的jdk动态代理和cglib动态代理区别
- Java 动态代理的理解与Cglib动态代理实现
- java动态代理与cglib代理的简单使用
- java动态代理 JDK、Cglib动态代理
- java动态代理和cglib动态代理
- Populating Next Right Pointers in Each Node
- JDBC (oracle)JAVA连接数据库
- 对象的创建过程
- Android开发之使用VideoView播放视频
- 敏捷开发之组织级经验分享
- Java的CGLib动态代理
- 【转】Redis命令总结
- unity实现war3真三国无双(一)资源提取
- 【SSH + BootStrap】实现的无线点餐系统
- 计算机网络-网络层次结构
- 数论
- hdu 2510 符号三角形 dfs+打表
- java中关于Map的九大问题
- Struts2官方文档之Tag Syntax (文章摘自Struts2 官方文档,以备以后查看)