我需要创建一个没有构造函数参数的不完整对象。像这样的
Class A {
private final int timeOut
public A(int timeout)
{
this.timeOut = timeout;
}
//...
}
我希望这个 Bean 由 Spring 管理,以便以后可以使用 Spring AOP。
<bean id="myBean" class="A" singleton="false">
</bean>
但是,我的 bean 需要超时才能作为动态值传递 - 有没有办法创建一个 Spring 托管 bean,并在构造函数中注入(inject)动态值?
最佳答案
BeanFactory
有一个 getBean(String name, Object... args)
方法,根据 javadoc , 允许您指定用于覆盖 bean 定义自己的参数的构造函数参数。因此,您可以在 beans 文件中放置一个默认值,然后在需要时指定“真实”运行时值,例如
<bean id="myBean" class="A" scope="prototype">
<constructor-arg value="0"/> <!-- dummy value -->
</bean>
然后:
getBean("myBean", myTimeoutValue);
我自己没有尝试过,但应该可以。
附: scope="prototype"
现在优于 singleton="false"
,后者是不推荐使用的语法 - 它更明确,但做同样的事情。
关于java - 具有动态构造函数值的spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772585/