使用自动装配的不同事物创建多个 Bean 实例
Posted
技术标签:
【中文标题】使用自动装配的不同事物创建多个 Bean 实例【英文标题】:Creating multiple Bean instances with different things autowired in 【发布时间】:2021-02-01 02:01:32 【问题描述】:我正在尝试获取 Spring Boot 依赖注入以允许我执行以下操作:
interface MyBean
@Component
class MyBeanA : MyBean
@Component
class MyBeanB : MyBean
@Component
class MyBeanConsumer(myBean: MyBean)
这里,Spring 抱怨有多个 MyBean
类型的 bean。我希望它创建两个MyBeanConsumer
实例。一个是MyBeanA
,一个是MyBeanB
。我需要对许多 bean 执行此操作,因此我试图避免像这样的样板配置类:
@Configuration
class MyBeanConfiguration
@Bean
fun consumers(myBeans: List<MyBean>) = myBeans.map MyBeanConsumer(it)
这可能在春季吗?
【问题讨论】:
那么您将拥有多个MyBeanConsumer
实例。你想如何使用它们。我的意思是在您的程序中的某个地方,您想使用其中一个,而在某个地方使用另一个?或者你想遍历它们并做一些事情。
是的,拥有多个实例是计划。我想将它们用作列表。
【参考方案1】:
您可以使用Qualifier
注释并指定请求的bean 的名称。
你可以访问这个 Spring @Autowired and @Qualifier
【讨论】:
这没有回答问题。我不想要一个具有限定参数的实例。我希望每个可能的参数都有一个实例。【参考方案2】:如果您想在程序中的任何地方将它们作为 bean 列表注入,您可以采用这种方法。
@Configuration public MyConfigurationClass
@Bean
@Qualifier("mylist")
public List<MyType> configure()
//create your dynamical list here
但是,如果您想在程序中的某个地方将它们用作单个 bean,并且还想将它们全部作为 List 注入到其他地方,您可以这样做:
@Configuration
public class AppConfig implements BeanFactoryPostProcessor
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
for (int i = 0; i < 3; i++)
System.out.println("register my bean: " + i);
beanFactory.registerSingleton("bean-" + i, new MyBean("MyBean-" + i));
阅读以下答案以获取更多详细信息: How to create multiple beans of same type according to configuration in Spring?
【讨论】:
这正是我想要避免的:每种情况的样板。我在问题中说明了这一点。以上是关于使用自动装配的不同事物创建多个 Bean 实例的主要内容,如果未能解决你的问题,请参考以下文章