hibernate - 将数据库实体传递给另一个类给出,无法自动装配错误
问题描述
不确定我是否理解为什么我在下面的代码中出现编译错误。我正在循环一个列表 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。
有任何想法吗?
解决方案
您正在尝试以两种不同的方式实例化您的 MailRouteBuilder:
- 在 MailRouteProcess.exchange 中,您手动调用构造函数,并传递从 MailDataSourceService 获得的 MailDataSource。
- 另一方面,您将 MailRouteBuilder 注释为 @Component,因此 Spring 将尝试实例化它。在这种情况下,MailDataSource 必须是托管 bean。从你的错误来看,它不是。
总而言之,错误不是源于将实例传递给另一个实例,而是源于自动装配失败。(您需要 MailRouteBuilder 成为托管组件吗?)
推荐阅读
- java - 显示旧机器路径的类路径
- css - 如何从图像集合中在 CSS 中设置光标
- c# - 如何将结构数组从 C 返回到 C#
- c++ - 如果我想使用“new”来分配它的数组,我是否必须为我的类定义一个默认构造函数?
- javascript - 当我在 codignator 中使用 ajax 时,我遇到了这个问题
- html - 水平滚动不适用于 div 元素
- php - 如何从codeigniter中的其他数据库获取数据?
- oracle - PL/SQL 输出格式
- ruby - CryptoJS Base64 字符串化的 Ruby 版本
- angular - 在 Angular 服务中测试管道/嵌套的 HttpClient 未完成