Java bean Spring的多个实例
我在spring中有一个配置文件,我想为我在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中为每个配置条目创建一个实
@组件的每个实例定义一个构造函数参数。我该怎么做
@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属性。