java-SpringBoot自动装配通用类型失败,因为可能有多个bean
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-SpringBoot自动装配通用类型失败,因为可能有多个bean,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2125字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试创建一个类,该类自动装配T类型的对象.
@component
public class TaskScheduler<T extends TaskService>{
@Autowired
private T taskService;
}
问题是我有两个扩展TaskService的组件.
@component
public class firstTaskService extends TaskService {
}
和
@component
public class secondTaskService extends TaskService {
}
因此,当执行此行时(正在创建ts)
@Autowired
TaskScheduler<firstTaskService> ts;
我收到此错误:
Description:
Parameter 1 of constructor in TaskScheduler required a single bean, but 2 were found
我得到的消息是这样的:
Action: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify
the bean that should be consumed.
但是据我了解,@ Primary和@Qualifier批注使我选择了其中一个组件,这不是我想要的组件,因为我想对同一类(TaskScheduler)使用firstTaskService和secondTaskService.
怎么办呢?
编辑:澄清:我的目标是将TaskScheduler类与扩展TaskService类的不同类重用(不要使用在TaskScheduler中一起扩展TaskService的多个类).
解决方法:
如果要自动装配扩展TaskService的所有bean,则应将自动装配字段更改为List:
@Component
public class TaskScheduler<T extends TaskService>{
@Autowired
private List<T> taskService;
}
这样,Spring应该将扩展TaskService的所有可自动连接的bean放入List中.
编辑:由于您想从动力学上选择TaskService的类型,因此我找到的唯一方法如下.首先,重新定义您的TaskScheduler:
public class TaskScheduler <T extends TaskService>{
private T taskService;
public void setTaskService(T taskService) {
this.taskService = taskService;
}
}
您的TaskService和相关子类应保持不变.按如下所示设置配置类:
@Configuration
public class TaskConf {
@Autowired
private FirstTaskService firstTaskService;
@Autowired
private SecondTaskService secondTaskService;
@Bean
public TaskScheduler<FirstTaskService> firstTaskServiceTaskScheduler(){
TaskScheduler<FirstTaskService> t = new TaskScheduler<>();
t.setTaskService(firstTaskService);
return t;
}
@Bean
public TaskScheduler<SecondTaskService> secondTaskServiceTaskScheduler(){
TaskScheduler<SecondTaskService> t = new TaskScheduler<>();
t.setTaskService(secondTaskService);
return t;
}
}
然后以这种方式测试您的TaskScheduler:
@Autowired
TaskScheduler<firstTaskService> ts;
内容总结
以上是互联网集市为您收集整理的java-SpringBoot自动装配通用类型失败,因为可能有多个bean全部内容,希望文章能够帮你解决java-SpringBoot自动装配通用类型失败,因为可能有多个bean所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。