如何解决SpringAop内部调用时不经过代理类的问题
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,如何解决SpringAop内部调用时不经过代理类的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SpringAopAOP代理织入
千家信息网最后更新 2025年11月17日如何解决SpringAop内部调用时不经过代理类的问题
如何解决SpringAop内部调用时不经过代理类的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
SpringAop
AOP代理织入时期
编译时织入 - aspectj框架
类加载时织入 - aspectj框架
运行时织入 - spring-aop
动态代理方式
JDK - 被代理对象必须需要实现接口
CGLIB - 采用继承被代理对象方式实现代理功能
解决SpringAop内部调用时不经过代理类(而是通过this)
方案一
通过编译时织入或者类加载时织入代码
方案二
通过当前代理类调用目标方法
getOne()方法中直接调用getAll()时是通过this对象,这时候getAll()方法上的@AopLog就不会被AOP扫描到
@Service@Slf4jpublic class ServiceImpl implements IService { @Override @AopLog("value=getOne") public void getOne() { log.info("getOne running"); // 直接调用getAll()方法 = this.getAll() getAll(); } @Override @AopLog("value=getAll") public void getAll() { log.info("getAll running"); }}修改getOne()方法,通过AopContext.currentProxy()方法获取当前代理类,通过代理类来调用getAll()方法,这时候就是通过代理类调用的
@Service@Slf4jpublic class ServiceImpl implements IService { @Override @AopLog("value=getOne") public void getOne() { log.info("getOne running"); // 获取当前代理类,通过代理类来调用getAll()方法 ((IService) AopContext.currentProxy()).getAll(); } @Override @AopLog("value=getAll") public void getAll() { log.info("getAll running"); } @AopLog("value=getById") private void getById() { log.info("getById running"); }}this使得SpringAop失效之谜
问题描述
类Demo被AOP扫描到,其中有A和B两个方法,A方法中调用了B方法,执行A方法时,B方法的代理没有生效
问题剖析
我们知道AOP底层使用JDK动态代理和cglib动态代理想结合,通过判断去创建对应的代理对象。
而不管是那种方法,最终执行完代理后,都会执行目标方法:method.invoke(target,agrs)-->传入目标对象
所以执行A方法的代理后,执行A的目标方法,此时执行的对象是目标对象,所以目标对象执行A方法是A中隐藏的this
指的就是目标对象,即执行B方法的不再是代理对象而是目标对象,故B方法不会被代理
关于如何解决SpringAop内部调用时不经过代理类的问题问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
代理
方法
对象
目标
问题
动态
就是
方式
方案
更多
框架
而是
帮助
编译
解答
易行
简单易行
两个
代码
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界服务器保护村庄打僵尸
网络技术中心学生助理
数据库支持的基本操作
武装突袭3服务器进不去了
无法联接到服务器什么意思
gp数据库的时间类型
csrq和ddos网络安全
苹果app软件开发
ppp软件开发建议
如何管理数千台服务器
太原东塔网络安全学院
纯前端实现连接数据库
linux服务器静态ip设置
朋友圈数据库设计
广州办公系统软件开发价位
网络安全实验报告案
全新wifi6网络技术
西宁软件开发专业
东疆网络技术有限公司
t3建立的数据库已存在
数据库专业导论报告
戴尔服务器t7600装系统
db2数据库 case
配置管理器服务器
日本制药通用名数据库
常熟电子网络技术服务价格
图形数据库 路径最短
我国制定了网络安全的目的是为了
网络安全宣传加盟
ibm 服务器u盘装系统