繁体   English   中英

Spring @Transactional注释使我的课程无法自动装配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM