Spring AOP注解为什么失效?90%Java程序员不知道
来源:互联网 发布:淘宝标题关键词测试 编辑:程序博客网 时间:2024/06/08 08:46
使用Spring Aop注解的时候,如@Transactional, @Cacheable等注解一般需要在类方法第一个入口的地方加,不然不会生效。
如下面几种场景
1、Controller直接调用Service B方法:Controller > Service A
在Service A 上加@Transactional的时候可以正常实现AOP功能。
2、Controller调用Service A方法,A再调用B方法:Controller > Service A > Service B
在Service B上加@Transactional的时候不能实现AOP功能,因为在Service A方法中调用Service B方法想当于使用this.B(),this代表的是Service类本身,并不是真实的代理Service对象,所以这种不能实现代理功能。
所以,如果不是直接调用的方式,是不能实现代理功能的,非常需要注意。
但确实有这种不是直接调用的试,也需要实现代理功能,怎么做呢?很简单,只需要暴露当前代理对象给当前线程就行了,如下配置,注解粗体的部分。
expose-proxy="true"/>
protected final T proxy() {
return (T)AopContext.currentProxy();
}
这样就能拿到代理对象了,在Service A中可以通过proxy().B()即可正常实现B方法上面的代理功能。
看下AopContext源码,Spring会将当前代理对象绑定到当前线程ThreadLocal上面。
关于线程绑定变量参考昨天分享的ThreadLocal文章。
阅读全文
0 0
- Spring AOP注解为什么失效?90%Java程序员不知道
- spring aop注解失效之谜
- spring 注解aop不生效
- java 自定义注解 spring aop 实现注解
- spring注解时AOP失效,XML配置<bean>正常
- spring aop 失效问题
- Spring-AOP基于JAVA注解实现
- 不知道java中为什么那么多layout
- Spring注解事务失效
- 【Java-Spring开发】aop注解 自定义切面的注解写法
- spring(AOP) 注解实现aop
- spring注解实现AOP
- Spring Aop 注解
- spring aop 注解
- spring aop注解Demo
- spring中 aop注解
- Spring AOP 完全注解
- Spring AOP注解配置
- SElinux type 引起的SSH认证免密登陆失败总结
- 好未来:删除公共字符串
- 彻底理解正向代理和反向代理
- 设计模式之单例模式实践
- 获取Spring的ApplicationContext的几种方式
- Spring AOP注解为什么失效?90%Java程序员不知道
- @Resource,@Autowired,@Inject3种注入方式详解
- codeforces Div.2 #840D Leha and another game about graph 顶点权值为度数对应奇偶
- @Controller,@Service,@Repository,@Component详解。
- Spring零配置之@Configuration注解详解。
- 一张图搞懂Spring bean的完整生命周期。
- JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)。
- 自定义View (五) 阴影、渐变
- IntegerCache的妙用和陷阱!