没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
关于关于Spring注解注解@Async引发其他注解失效的解决引发其他注解失效的解决
主要介绍了关于Spring注解@Async引发其他注解失效的解决,小编觉得挺不错的,现在分享给大家,也给大家
做个参考。一起跟随小编过来看看吧
概述概述
在前面一篇文章中,介绍,在一个Bean中注入自己,如果有@Async和@Transaction,如果使用@Autowire注入自身,会报
循环依赖,如果使用BeanFactoryAware注入自己,会使得@Transaction失效。 例如:
@Service
public class MyService implements BeanFactoryAware{
private MyService self;
//事务注解无效
@Transactional
public void notWork() {
...
}
@Async
public Future async(){
...
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
self= beanFactory.getBean(MyService.class);
}
}
当时只是简单提了一下,这篇文章就是来介绍为什么会失效。
一般情况一般情况
造成上面的情况需要满足以下条件:
1. 有@Async和其他类似@Transaction注解
2. 自己类在BeanFactoryAware中,通过BeanFactory获取自己
造成的结果:除@Async外的注解生效,其他的都不生效,如下图
而正常代理的应该是下图:
原因原因
首先想到的是@Async注解的处理方式可能和其他的不一样。在AsyncAnnotationBeanPostProcessor的实现中(具体代码是
在其父类AbstractAdvisingBeanPostProcessor),发现一个问题,
正常情况下,进来的bean已经是被代理的动态代理类,而失效的时候,进来的确实实际的类,如下图:
资源评论
weixin_38548817
- 粉丝: 3
- 资源: 917
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功