如何解决SpringAop内部调用时不经过代理类的问题
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,如何解决SpringAop内部调用时不经过代理类的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SpringAopAOP代理织入
千家信息网最后更新 2025年02月05日如何解决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安全错误
数据库的锁怎样保障安全
会稽源 数据库
杭州支付宝网络技术公司
sql查询数据库文件
笔记本驱动软件开发
怎么查着软件开发公司
邺德网络技术有限公司
贵州智慧团建软件开发哪儿好
长沙fil服务器加盟
酒店数据库管理测试与实现
创建地理数据库
酒泉市网络安全培训机构
计算机维修技术与软件开发区别
实验4 数据库安全性管理
湖南 互联网科技有限公司
莱美App 显示服务器
数据库需求 分析怎么写
无法打开数据库sql
数据库 约束表达式
静安区管理软件开发代理价格
网页连接微信小程序云数据库
数据库查询语句判断
深圳网络技术小鹅后端开发
快速的直销软件开发
数据库表的关键字
深圳彩帛网络技术有限公司
想学网络技术开发
建 网站 是软件开发
数据库表增加限制
网络安全11月14日
软件开发技校院校