细说Spring——AOP详解(使用CGLIB实现AOP)

本文详细介绍了CGLIB在Spring AOP中的应用,针对Java动态代理无法代理未实现接口的目标对象的问题,阐述了CGLIB通过创建目标类子类进行动态增强的原理。通过实例展示了如何使用CGLIB实现AOP,包括实现Enhancer接口、定义回调方法以及测试代码,最后总结了CGLIB和JDK动态代理在AOP实现上的差异。
摘要由CSDN通过智能技术生成
一、动态代理实现AOP的缺陷

在上一篇文章细说Spring——AOP详解(动态代理实现AOP)中讲解了如何使用动态代理实现AOP,虽然Java动态代理为我们提供了非常灵活的代理机制,但Java动态代理是基于接口的,如果目标对象没有实现接口我们该如何代理呢?这时候我们就需要使用CGLIB来实现AOP了。

二、CGLIB实现代理的原理

我们先创建一个目标对象

package demo1;

/**
 * Created by Yifan Jia on 2018/6/9.
 */
public class SomeService {
   
    public String doFirst() {
        System.out.println("执行doFirst()方法");
        return "abcde";
    }

    public void doSecond() {
        System.out.println("doSecond()方法");
    }

}

针对这个目标类,假如我们要使用动态代理实现AOP,那么我们只能在写一个增强的接口,然后让目标类实现增强接口,然后我们就可以使用动态代理实现目标类的增强,可是假如我们不想让目标类实现其他的接口,那么我们就只能使用CGLIB技术来实现目标类的增强了。
CGLIB实现目标类增强的原理是这样的:CGLIB会动态创建一个目标类的子类,然后返回该子类的对象,也就是增强对象,至于增强的逻辑则是在子类中完成的。我们知道子类要么和父类有一样的功能,要么就比父类功能强大,所以CGLIB是通过创建目标类的子类对象来实现增强的,所以:

目标子类 = 目标类 + 增强逻辑

至于CGLIB底层是如何动态的生成一个目

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值