[英]Spring @Transactional annotation making my class not able to Autowire
我有一个SaveRoute
类,它具有自动连接的属性SaveProcessor。 这个SaveProcessor类具有一个使用@Transactional注释进行注释的方法。 当我尝试运行我的应用程序时,Java抛出了一个异常,即bean SaveProcessor依赖项注入失败。 当我从SaveProcess
类方法中删除@Transactional
批注SaveProcess
,它工作正常。
保存路线
public class SaveRoute implements RouteBuilder{
@Autowired
private SaveProcessor saveProcessor;
}
保存处理器
public class SaveProcessor implements Processor{
@Override
public void Process(Exchange exchange){
this.save();
}
@Transactional
public void Save(){
}
}
如果有人可以帮助我,那就太好了。 @Transactional
使SaveProcessor类不适合自动接线。
自动SaveProcessor
时,应使用Processor
接口而不是SaveProcessor
具体类:
@Autowired
private Processor saveProcessor;
我能够找到解决方案。 新增中
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
在SaveProcessor类的顶部解决了我的问题。
我不能使用
@Autowire公共处理器SaveProcessor;
这是因为我的应用程序中有多个处理器实现。
同意Spring @Transactional注释,这使我的班级无法自动装配答案,这是在设置时按接口自动装配的好习惯
@交易
spring为您的SaveProcessor对象创建代理,因为它实现了Processor, spring将使用DynamicProxy 。 因此,您在上下文中没有带类SaveProcessor的bean,而是有calss Proxy $ ..实现tartar intarface Processor的bean。
这就是为什么春天找不到候选人。
如果您具有多个Processor的实现,这不是问题,只需使用
@Qualifier
,或按beanName自动装配。 在你的情况下
@Autowired
private Processor saveProcessor;
将起作用,因为bean具有名称saveProcessor
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.