java - Spring @Transactional 注释使我的类无法 Autowiring

标签 java spring spring-mvc transactions spring-transactions

我有一个类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/

相关文章:

java - Spring MVC : No mapping in DispatcherServlet with name mvc-dispatcher

java - Spring ConversionService 添加转换器

java - 我需要对输出进行一些小的更改,请帮助我

java - JPA : How to convert a native query result set to POJO class collection

spring - REST 排序以负 ('-' ) 符号降序,而不是 <propertyName>.dir=desc

java - 如何将对象传递给 Controller ​​中的 ModelAttribute - Spring

ajax - 如何将Json对象从ajax传递到spring mvc Controller ?

mongodb - 如何在 mongodb 集合中存储经纬度?以及如何在 Spring 中使用它?

java - Spring MVC CRUD 应用程序

java - 将 doClick 放入 JOptionPane 中