bean的多个实例Spring

时间:2017-09-26 13:50:24

标签: java spring spring-boot

我在spring中有一个配置文件,我想为春天的特定@Component的每个实例定义一个构造函数参数。我怎么能这样做?

@Component
public class MyComponent {
    public MyComponent(String config) {}
}

在我的application.yml我想要定义类似的内容:

myconfig:
   - config1
   - config2
   - config3

我想让spring在application.yml中为每个配置条目创建一个实例。那可能吗? 感谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

使用Spring无法自动执行此操作。您可能需要单独定义bean,可能是通过子类化为@Mick建议的。首先,从基类中删除@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将值注入到构造函数中。