春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?
你绝对可以做到。你的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
对不起,我打错了我的bean定义,我已经使用constructor-arg不属性,将修复我的帖子。 – user1156327 2011-03-30 19:39:01
那你的问题就没有意义了。如果你定义了constructor-arg参数被传递到bean创建的构造函数中 – 2011-03-30 19:54:05
“abc”被传入,而不是“def”。后来Spring出现并调用setName(“def”),这不是我想要的。我想要用“def”调用构造函数 – user1156327 2011-04-11 15:31:36
[这里](http://*.com/questions/5544525/constructor-injection-with-value-provided-by-another-bean),你可以找到解决方案。这个对我有用。祝你好运。 – 2012-01-27 13:09:19