首页 > 解决方案 > 将数据库实体传递给另一个类给出,无法自动装配错误

问题描述

不确定我是否理解为什么我在下面的代码中出现编译错误。我正在循环一个列表 DB 实体,如果它在我的主列表中不存在,那么我创建一个新的 Camel Route 并将实体作为参数传递给另一个类。

@Component
public class MailRouteProcess implements Processor {

    private static List<MailDataSource> mailDSList = new ArrayList<>();

    @Autowired
    MailDataSourceService mailDataSourceService;

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    CamelContext camelContext;

    @Override
    public void process(Exchange exchange) throws Exception {
        List<MailDataSource> mailDataSourceList = mailDataSourceService.findAll();
        for(MailDataSource mailDataSource : mailDataSourceList) {
            if(!mailDSList.contains(mailDataSource)) {
                camelContext=(CamelContext)applicationContext.getBean("mainCamelContext");
                camelContext.addRoutes(new MailRouteBuilder(camelContext, mailDataSource));
                mailDSList.add(mailDataSource);
            }
        }
    }
}

然后在我的 MailRouteBuilder 类中,我有:

@Component
public class MailRouteBuilder extends RouteBuilder {

    public MailRouteBuilder(CamelContext camelContext, MailDataSource mailDataSource) {
        super(camelContext);
    }

但是在 MailDataSource 邮件数据源上出现以下编译错误:

无法自动接线。找不到“MailDataSource”类型的 Bean。

有任何想法吗?

标签: hibernatespring-bootentity

解决方案


您正在尝试以两种不同的方式实例化您的 MailRouteBuilder:

  • 在 MailRouteProcess.exchange 中,您手动调用构造函数,并传递从 MailDataSourceService 获得的 MailDataSource。
  • 另一方面,您将 MailRouteBuilder 注释为 @Component,因此 Spring 将尝试实例化它。在这种情况下,MailDataSource 必须是托管 bean。从你的错误来看,它不是。

总而言之,错误不是源于将实例传递给另一个实例,而是源于自动装配失败。(您需要 MailRouteBuilder 成为托管组件吗?)


推荐阅读