CgLib动态代理的简单使用

CgLib动态代理的简单使用

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

简介

CGLIB(Code Generation Library) 是一个开源项目!它是一个强大的,高性能,高质量的 Code 生成类库,它可以在运行期扩展 Java 类与实现 Java 接口。Hibernate 支持它来实现 PO(Persistent Object 持久化对象) 字节码的动态生成。

使用

1、引入 CgLib 支持 Jar,点击下载

2、编写被代理类:

// com.zze.service.Waiter
public class Waiter {
    public void service() {
        System.out.println("正在服务");
    }
}

3、使用 CGLIB 提供的动态代理:

@Test
public void test() {// 创建核心类对象
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(Waiter.class);
    enhancer.setCallback(new MethodInterceptor() {
        @Override
        public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
            // 判断方法是否是 save
            if ("service".equals(method.getName())) {
                // 增强,权限校验
                System.out.println("权限校验...");
            }
            return methodProxy.invokeSuper(o, args);
        }
    });
    Waiter customerDaoProxy = (Waiter) enhancer.create();
    customerDaoProxy.service();
}

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/cglib.html

Buy me a cup of coffee ☕.