Java bean Spring的多个实例

Java bean Spring的多个实例,java,spring,spring-boot,Java,Spring,Spring Boot,我在spring中有一个配置文件,我想为我在spring中拥有的特定@组件的每个实例定义一个构造函数参数。我该怎么做 @Component public class MyComponent { public MyComponent(String config) {} } 在我的应用程序.yml中,我想定义如下: myconfig: - config1 - config2 - config3 我想让spring在application.yml中为每个配置条目创建一个实

我在spring中有一个配置文件,我想为我在spring中拥有的特定
@组件的每个实例定义一个构造函数参数。我该怎么做

@Component
public class MyComponent {
    public MyComponent(String config) {}
}
在我的
应用程序.yml
中,我想定义如下:

myconfig:
   - config1
   - config2
   - config3
我想让spring在
application.yml
中为每个配置条目创建一个实例。可能吗?
谢谢

您想用一个注释创建3个bean吗?据我所知不可能。为什么不创建3个子类并使用@Resource注释拉入配置值呢?
顺便说一句:您必须提供一个默认构造函数,因为它是被调用的构造函数。

您想用一个注释创建3个bean吗?据我所知不可能。为什么不创建3个子类并使用@Resource注释拉入配置值呢?
顺便说一句:您必须提供一个默认构造函数,因为它是被调用的构造函数。

使用Spring无法自动完成此操作。您可能需要按照@Mick的建议,通过子类化来单独定义bean。首先,从基类中删除@Component注释:

public class MyComponent {
    public MyComponent(String config) {}
}
创建每个配置所需的@Components扩展:例如:

@Component
public class MyComponentConfig1 extends MyComponent {

    public MyComponentConfig1(@Value("myconfig.config1") String config) {
          super(config);
    }

}

注册bean时,Spring会为您将值注入到构造函数中。

使用Spring无法自动完成此操作。您可能需要按照@Mick的建议,通过子类化来单独定义bean。首先,从基类中删除@Component注释:

public class MyComponent {
    public MyComponent(String config) {}
}
创建每个配置所需的@Components扩展:例如:

@Component
public class MyComponentConfig1 extends MyComponent {

    public MyComponentConfig1(@Value("myconfig.config1") String config) {
          super(config);
    }

}

在注册bean时,Spring会为您将值注入构造函数。

实际上,它将是同一类的14个实例。这个类是另一个流系统的侦听器,我无法控制它。因此,这个具有相同impl的类必须有14个实例,每个实例将侦听不同的流……您也可以这样做:
@Inject Instance myFactory
调用
myFactory.get()
后,可以使用标准的setter方法而不是构造函数参数设置config属性。实际上,它将是同一类的14个实例。这个类是另一个流系统的侦听器,我无法控制它。因此,这个具有相同impl的类必须有14个实例,每个实例将侦听不同的流……您也可以这样做:
@Inject Instance myFactory
调用
myFactory.get()
后,可以使用标准setter方法而不是构造函数参数来设置config属性。