cgkib动态代理详解-不依赖接口,速度快

1. cglib原理-不依赖接口,速度快

使用ASM字节框架动态生成要代理类的子类,子类重写final以外的方法,织入横切逻辑

2. 示例-实现MethodInterceptor

Test.java
public class Test {
    public  void sayHello(String ss){
        System.out.println(ss);
    }
}
TargetInterceptor.java
public class TargetInterceptor implements MethodInterceptor {
    public  Object getInstance(Object source){
        Enhancer enhancer = new Enhancer();
        //设置父类
        enhancer.setSuperclass(source.getClass());
        //设置回调方法
        enhancer.setCallback(this);
        //创建代理对象
        return enhancer.create();
    }

    /**
     * 重写方法拦截在方法前和方法后加入业务
     * Object obj为目标对象
     * Method method为目标方法
     * Object[] params 为参数,
     * MethodProxy proxy CGlib方法代理对象
     */
    public Object intercept(Object obj, Method method, Object[] params,
                            MethodProxy proxy) throws Throwable {
        System.out.println("调用前");
        Object result = proxy.invokeSuper(obj, params);
        System.out.println(" 调用后"+result);
        return result;
    }

    public static void main(String[] args) {
        Test test = new Test();
        Test proxy = (Test)new TargetInterceptor().getInstance(test);
        System.out.println("proxy类型:"+proxy.getClass().getName());
        proxy.sayHello("zzzzzzz");
    }
}

执行结果

proxy类型:test.java.cglibtest.Test$$EnhancerByCGLIB$$6926e63
调用前
zzzzzzz
 调用后null
posted @   Desneo  阅读(300)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示