2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》-阿里云开发者社区

开发者社区> Java技术进阶> 正文

2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》

简介: 2.3.3 CGLIB动态代理 -《SSM深入解析与项目实战》

2.3.3  CGLIB动态代理

前面介绍了JDK的动态代理,从一些实例也可以看到,JDK动态代理是依赖于实现的接口的。而CGLIB弥补了这个缺点,让我们在不需要实现接口的情况下,也可以实现动态代理。JDK动态代理和CGLIB动态代理在Spring实现AOP中都是使用到的技术,Spring AOP默认是使用JDK动态代理来代理接口的,但是可以进行强制使用CGLIB动态代理。

CGLIB内部使用了ASM(Java字节码操控框架)来进行转换字节码。可以代理没有接口类的类。所以相比较JDK动态代理来说,灵活一些,更值得称赞的地方是,由于CGLIB第通过字节码产生子类进行覆盖委托类的非final方法进行代理,而JDK动态代理使用Java类反射进行代理,所以CGLIB动态代理比JDK动态代理更快。注意,CGLIB不能对final和私有方法进行代理。

实例演示。首先创建一个委托类(目标类)。

代码清单2-25:AliPay目标类

public class AliPay {
    public void pay(String operation) {
        System.out.println("进行AliPay支付,操作:" + operation);
    }
}

可以看到,在这里我们不再实现Pay接口了。

接下来我们需要引入一个依赖。在pom.xml文件中增加如下代码。不使用该包下的,使用org.springframework.cglib.proxy下的MethodInterceptor 类也是可以的。

代码清单2-26:pom.xml文件增加如下代码

<dependencies>
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.1</version>
    </dependency>
</dependencies>

接下来就是直接写CGLIB的代理类。


更多内容请阅读原文:
https://chenhx.blog.csdn.net/article/details/108027551

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
Java技术进阶
使用钉钉扫一扫加入圈子
+ 订阅

Java技术进阶成长,课程资料,案例解析,实战经验全都有!

官网链接