cglib动态代理简介说明

乔欣 Java面经 发布时间:2022-11-14 23:08:11 阅读数:12804 1 架构设计面试题(2023版)
下文笔者讲述cglib动态代理简介说明,如下所示

cglib动态代理简介

CGLib动态代理:
   是基于底层字节码技术的一种代理技术
CGLib动态代理原理:
   通过字节码技术为一个类创建子类
    并在子类中采用方法拦截的技术拦截所有父类方法的调用
     织入横切逻辑
img
例:
目标类
package com.java265.cglib;
public class Target {

    public String execute() {
        String message = "-----------test------------";
        System.out.println(message);
        return message;
    }
}

通用代理类
package com.java265.cglib;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class MyMethodInterceptor implements MethodInterceptor{

    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println(">>>>MethodInterceptor start...");
        Object result = proxy.invokeSuper(obj,args);
        System.out.println(">>>>MethodInterceptor ending...");
        return "result";
    }
}

测试类
package com.java265.cglib;
import net.sf.cglib.proxy.Enhancer;
public class CglibTest {
    public static void main(String[] args) {
        System.out.println("***************");
        Target target = new Target();
        CglibTest test = new CglibTest();
        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();
    }

}
----运行以上代码,将输出以下信息-------
***************
>>>>MethodInterceptor start...
-----------test------------
>>>>MethodInterceptor ending...
result
注意事项:
    代理对象的生成过程由Enhancer类实现
    具体步骤如下所示:  
      1.生成代理类Class的二进制字节码;
      2.通过Class.forName加载二进制字节码,生成Class对象;
      3.通过反射机制获取实例构造,并初始化代理类对象。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16684385344914.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者