首页 > 代码库 > cglib 代理
cglib 代理
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();
cglib 代理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。