Spring Di通过setter动态构造函数参数

时间:2014-06-30 17:53:03

标签: java spring dependency-injection

我是Spring框架的初学者,我在this教程之后通过setter应用DI。一切正常,但我想在我的类 CsvOutputGenerator 中添加一个带有一个动态参数的构造函数,当我从Application上下文中获取bean时动态传递。

我该怎么做?

我已经用这种方式改变了我的弹簧配置:

...
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator">
    <constructor-arg type="java.lang.String" value="Test"/>
</bean>
...

但是这样我的构造函数就是静态值。

3 个答案:

答案 0 :(得分:2)

您可以通过系统属性传递它,例如

<constructor-arg lazy-init="true" type="java.lang.String" value="#{ systemProperties['some.key']}"/>

答案 1 :(得分:1)

尝试别的东西,即使Spring没有像这样使用(注意&#34;原型&#34;范围):

<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator" scope="prototype" />

然后在您的代码中,您可以执行以下操作:

CsvOutputGenerator myBean = (CsvOutputGenerator) context.getBean("CsvOutputGenerator", "testing testing");

This是我在上面使用的API中的方法。

答案 2 :(得分:1)

以下内容基于上述问题和评论。 假设你有一个带有属性String url的类URLRepo。 url初始化为value。 然后你可以做这样的事情来连接你的CsvOutputGenerator

public class URLRepo {
     private String url = "your value";
     getters and setters
}


<bean id="urlRepo" class="com.*.*.MyURLRepo"/>    

<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator">
    <constructor-arg type="java.lang.String" value="urlRepo.url"/>
</bean>

希望这就是你要找的东西。

相关问题