我有一个类SaveRoute
,它有一个自动连接属性SaveProcessor。
这个SaveProcessor类有一个用@Transactional注释注释的方法。当我尝试运行我的应用程序时,Java抛出了一个异常,即Bean SaveProcessor依赖注入失败。当我从@Transactional
类方法中删除SaveProcess
注释时,它工作正常。
SaveRoute
public class SaveRoute implements RouteBuilder{
@Autowired
private SaveProcessor saveProcessor;
}
SaveProcessor
public class SaveProcessor implements Processor{
@Override
public void Process(Exchange exchange){
this.save();
}
@Transactional
public void Save(){
}
}
如果有人可以帮助我,那就太好了。 @Transactional
使SaveProcessor类不是自动布线的候选者。
答案 0 :(得分:0)
在自动装配时,您应该使用Processor
接口而不是SaveProcessor
具体类:
@Autowired
private Processor saveProcessor;
答案 1 :(得分:0)
我能够找到解决方案。 添加
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)
在我的SaveProcessor类之上的解决了我的问题。
我无法使用
@Autowire public Processor SaveProcessor;
这是因为我的应用程序中的处理器有多个实现。
答案 2 :(得分:0)
同意Spring @Transactional annotation making my class not able to Autowire回答, 通过界面自动装配是一种很好的做法, 当你设置
@Transactional
spring代理您的 SaveProcessor 对象, 因为它实现 Processor spring将使用 DynamicProxy 。 所以你没有在上下文中使用类 SaveProcessor 的bean,你有一个带有calss Proxy $ ..的bean。它实现intarface Processor
这就是春天无法找到候选人的原因。
如果您有多个 Processor 的实现,那么这不是问题, 只需使用@Qualifier
,或通过beanName自动装配。在你的情况下
@Autowired
private Processor saveProcessor;
将起作用,因为bean具有名称 saveProcessor