Spring 使用自动连接的不同内容创建多个Bean实例

Spring 使用自动连接的不同内容创建多个Bean实例,spring,spring-boot,kotlin,dependency-injection,Spring,Spring Boot,Kotlin,Dependency Injection,我正在尝试让Spring启动依赖项注入允许我执行以下操作: 接口MyBean @组成部分 MyBean类:MyBean @组成部分 类MyBeanB:MyBean @组成部分 类MyBeanConsumer(myBean:myBean) 这里,Spring抱怨有多个类型为MyBean的bean。我希望它创建两个MyBeanConsumer实例。一个带有MyBeanA,另一个带有MyBeanB。我需要对许多bean执行此操作,因此我试图避免类似以下的样板配置类: @配置 类MyBean配置{ @

我正在尝试让Spring启动依赖项注入允许我执行以下操作:

接口MyBean
@组成部分
MyBean类:MyBean
@组成部分
类MyBeanB:MyBean
@组成部分
类MyBeanConsumer(myBean:myBean)
这里,Spring抱怨有多个类型为
MyBean
的bean。我希望它创建两个
MyBeanConsumer
实例。一个带有
MyBeanA
,另一个带有
MyBeanB
。我需要对许多bean执行此操作,因此我试图避免类似以下的样板配置类:

@配置
类MyBean配置{
@豆子
有趣的消费者(myBeans:List)=myBeans.map{MyBeanConsumer(it)}
}

这在Spring中是可能的吗?

您可以使用
限定符
注释并指定请求的bean的名称

你可以参观这个

如果程序中的任何地方都希望将它们作为bean列表注入,则可以使用这种方法

@Configuration public MyConfigurationClass {
        
        @Bean
        @Qualifier("mylist")
        public List<MyType> configure() {
            //create your dynamical list here
        }
 }
@Configuration公共MyConfiguration类{
@豆子
@限定词(“mylist”)
公共列表配置(){
//在这里创建您的动态列表
}
}
但是,如果您想在程序中的某个地方将它们作为单个bean使用,并且还想将它们作为列表注入到其他地方,您可以这样做:

@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));
        }
    }
@配置
公共类AppConfig实现BeanFactoryPostProcessor{
@凌驾
public void后处理beanFactory(ConfigurableListableBeanFactory beanFactory)引发BeanException{
对于(int i=0;i<3;i++){
System.out.println(“注册我的bean:+i”);
registerSingleton(“bean-”+i,newmybean(“MyBean-”+i));
}
}
请阅读以下答案以了解更多详细信息:

这并不能回答问题。我不希望一个实例带有限定参数。我希望每个可能的参数都有一个实例。然后您将拥有多个
MyBeanConsumer
。您希望如何使用它们。我的意思是,在您的程序中的某个地方,您希望使用其中一个实例,另一个实例?或者您希望迭代对,有多个实例是我们的计划。我想把它们作为一个列表。这正是我想要避免的:每个案例的样板。我在问题中已经说明了这一点。