cglib 动态代理库

来源:互联网 发布:h5响应式企业网站源码 编辑:程序博客网 时间:2024/05/01 16:36
1.CGLIB介绍
    cglib是Spring、Hibernate依赖的核心包,但是cglib还算不上最底层的,因为它是在asm包之上做了封装,以增强易用 性。是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。
 
2.例子:
public class Target {//目标对象    public String execute() {        String message = "----------test()----------";        System.out.println(message);        return message;    }}

 

拦截器:
import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class MyMethodInterceptor implements MethodInterceptor {    public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {        System.out.println(">>>MethodInterceptor start...");        Object result = methodProxy.invokeSuper(object,args);        System.out.println(">>>MethodInterceptor ending...");        return "hahahh";    }}

测试类:
import net.sf.cglib.proxy.Enhancer;/***/public class TestCglibProxy  {    public static void main(String rags[]){        Target target = new Target();        TestCglibProxy test = new TestCglibProxy();        Target proxyTarget = (Target)test.createProxy(Target.class);        String res=proxyTarget.execute();        System.out.println(res);    }    public Object createProxy(Class targetClass){        Enhancer enhancer = new Enhancer();        enhancer.setSuperclass(targetClass);        enhancer.setCallback(new MyMethodInterceptor());        return enhancer.create();    }}

3.cglib和jdk动态代理区别
   JDK动态代理只能对实现了接口的类生成代理,而不能针对类
   CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
0 0