2017-09-26 130 views
0

我在春天有一个配置文件,我想为我在春天的特定@Component的每个实例定义一个构造函数参数。我怎样才能做到这一点?一个bean的多个实例Spring

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

,并在我的application.yml我想定义是这样的:

myconfig: 
    - config1 
    - config2 
    - config3 

我想使春天创造每在application.yml config条目一个实例。那可能吗? 谢谢

回答

1

有没有办法自动与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的构造函数。

1

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

+0

事实上,它将成为同一班的14个实例。这个类是来自另一个我无法控制的流系统的监听器。因此这个具有相同impl的类必须有14个实例,并且每个实例都会听到不同的流...... – Augusto

+0

您也可以这样做:'@Inject Instance myFactory;'调用'myFactory.get()'后,您可以使用标准的setter方法而不是构造器参数来设置你的配置属性。 – Mick