春3.X PropertyOverrideConfigurer坚持使用一套,没有构造器

问题描述:

尝试使用Spring PropertyOverrideConfigurer或一些这样的子类,以帮助 创建以下豆:春3.X PropertyOverrideConfigurer坚持使用一套,没有构造器

public class Foo { 
    private final String name; 

    public Foo(String name) { this.name = name; } 

    public String getName() { return name; } 
} 

假设我的bean定义是一样的东西

<bean id="foo" class="Foo"> 
    <constructor-arg name="name" value="abc"> 
</bean> 

我递给春天有个文件foo.properties,在那里找到一个入口 foo.name =“高清”

因此,Foo bean的默认名称属性是“abc”,我希望它被overriden为“def”; 但是我不想让我的Foo类挂掉一个明确的setName(String name)方法,因为尽管Spring认为我认为这是软件开发中的一个可怕的 想法。我希望Spring能够将 覆盖的值作为“def”传递给Foo的构造函数, 稍后不会使用setName(“def”)调用Foo。

我还没有得到这个工作,有没有办法?我有唯一的成功是 到

public void setName(String name) { this.name = name; } 

添加方法Foo类,而这又我认为这是一个可怕的想法,因为它开辟 你的无心之副作用的后级。

有没有希望?我可以在 之前的某处修改bean的定义吗?Spring使用(错误的)“abc”名称创建Foo?

+0

[这里](http://*.com/questions/5544525/constructor-injection-with-value-provided-by-another-bean),你可以找到解决方案。这个对我有用。祝你好运。 – 2012-01-27 13:09:19

你绝对可以做到。你的XML应该有点像:

<bean id="foo" class="Foo"> 
    <constructor-arg index="0" value="abc"/> 
</bean> 

假设构造函数有一个参数和“ABC”是从你的属性文件来的值。在这种情况下,制定者不是必需的。

更多信息Spring文档中提供http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators

+0

对不起,我打错了我的bean定义,我已经使用constructor-arg不属性,将修复我的帖子。 – user1156327 2011-03-30 19:39:01

+0

那你的问题就没有意义了。如果你定义了constructor-arg参数被传递到bean创建的构造函数中 – 2011-03-30 19:54:05

+0

“abc”被传入,而不是“def”。后来Spring出现并调用setName(“def”),这不是我想要的。我想要用“def”调用构造函数 – user1156327 2011-04-11 15:31:36