Spring 如何实现AOP增强?

本文探讨了Spring AOP如何实现方法增强,包括JDK和CGLIB两种动态代理方式。同时,解释了为何在this.xxx内部调用无法被增强,并提出了两种解决方案:使用@Autowired注解或通过AopContext获取当前Proxy。要使用AopContext,需在配置中设置exposeProxy=true。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

Spring 如何实现AOP增强?

**
Spring AOP创建Proxy的过程:
AOP的底层是动态代理,创建代理的方式:

JDK方式
只能对实现了接口的类生成代理,不能针对普通类
CGLIB方式
可以针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法,来实现代理对象。
在这里插入图片描述

问题1:为什么this.xxx内部调用是不能被增强的?

结论:只有引用的是被 动态代理 所创对象,才能被Spring增强,实现期望的AOP功能。

方案1:@Autowired注解
通过 @Autowired,在类的内部,自己引用自己

方案2:直接从AopContext获取当前Proxy
AopContext,就是通过一个ThreadLocal来将Proxy和线程绑定起来,这样就可以随时拿出当前线程绑定的Proxy。使用该方案有个前提,需要在 @EnableAspectJAutoProxy 加配置项 exposeProxy = true ,表示将代理对象放入到ThreadLocal,这才可以直接通过AopContext.currentProxy()
获取到,否则报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值