CGLIB动态代理 demo

本文介绍了CGLIB作为Java动态代理的一种实现,它能够为没有接口的类生成代理对象,不同于JDK动态代理的限制。CGLIB通过ASM操作字节码生成新的类。示例中展示了使用Enhancer创建被代理对象的子类并拦截所有方法调用的过程。
摘要由CSDN通过智能技术生成

简介

在公司分享会上,提到了cglib生成动态生成代理类。cglib跟jdk动态代理最大的区别就是,jdk的动态代理要求被代理对象必须有接口,对那些没有接口的普通bean,jdk动态代理一点办法都没有,而cglib可以为没有接口的bean生成代理对象。其实cglib是使用ASM来操作字节码重新生成新的类,我么也可以使用ASM直接直接生成操作字节码,但是他需要对java字节码的格式有足够的了解。

API

Enhancer

Enhancer是cglib最常用的一个类,Enhancer创建一个被代理对象的子类并拦截所有的方法的调用,和jdk的proxy很类似,由于Enhancer是创建被代理对象的子类,所以Enhancer不能拦截final方法也不能代理final类

public class CGlibTestClass {
    public void test1(){
        System.out.println("hello world test1");
    }

    public void test2() {
        System.out.println("hello world test2");
    }



    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(CGlibTestClass.class);
        enhancer.setCallback((MethodInterceptor) (obj, method, args1, proxy) -> {
            System.out.println("before method run...");
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值