将数据库实体传递给另一个类给出,无法自动装配错误

时间:2019-04-27 10:50:06

标签: hibernate spring-boot entity

不确定我理解为什么我在下面的代码中遇到编译错误。 我正在循环一个列表数据库实体,如果它不在我的主列表中,那么我将创建一个新的骆驼路线并将该实体作为参数传递给另一个类。

@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上收到以下编译错误:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您试图以两种不同的方式实例化MailRouteBuilder:

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

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