标签:
cglib 代理
什么是cglib?
一段介绍是这样的:
CGLIB(Code Generation Library)是一个开源项目!
是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。
Spring AOP和Hibernate同时使用JDK的动态代理和CGLIB包。
cglib 代理特点:
CGLIB 是针对类来实现代理,它的原理是对指定的目标类生成一个子类,并覆盖其中方法。
因为采用的是继承,所以不能对 finall 类进行继承。
需要用到两个jar: cglib 和 asm
实例:
1、一个Hello 类,是目标对象
/** 没有接口的类 * Created by hp on 14-7-27. */ public class Hello { public void sayHello() { System.out.println("Hello ,world"); } }
2、代理类CglibProxy,
/** Cglib 动态代理 * Created by hp on 14-7-27. */ public class CglibProxy implements MethodInterceptor { private Object object; /* 创建代理对象 * @param object * @return */ public Object getProxyInstance(Object object) { this.object = object; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(object.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 = method.invoke(object, args); System.out.println("垃圾太多了,倒掉吧"); return result; } }
3、客户端调用
CglibProxy cglibProxy = new CglibProxy(); Hello hello = (Hello)cglibProxy.getProxyInstance(new Hello()); hello.sayHello();
标签:
原文地址:http://www.cnblogs.com/pan2011/p/3871309.html