我有一个类SaveRoute
,它有一个自动连接的属性SaveProcessor。
这个 SaveProcessor 类有一个用 @Transactional 注释进行注释的方法。当我尝试运行我的应用程序时,Java 抛出一个异常,指出 bean SaveProcessor 依赖注入(inject)失败。当我从 SaveProcess
类方法中删除 @Transactional
注释时,它工作正常。
保存路线
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 类不是 Autowiring 的候选者。
最佳答案
同意Spring @Transactional annotation making my class not able to Autowire回答, 通过接口(interface) Autowiring 是一个很好的做法, 当你设置时
@Transactional
spring 为您的 SaveProcessor 对象创建代理, 因为它实现了 Processor,spring 将使用 DynamicProxy。 所以你在上下文中没有一个带有SaveProcessor类的bean,你有一个带有calss Proxy$..的bean,它实现了intarface Processor。
这就是 spring 找不到候选人的原因。
如果您有多个处理器实现,这不是问题, 只需使用
@Qualifier
,或通过 beanName Autowiring 。在你的情况
@Autowired
private Processor saveProcessor;
可以工作,因为 bean 的名称为 saveProcessor
关于java - Spring @Transactional 注释使我的类无法 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012177/