具有动态构造函数值的spring bean

Sha*_*mik 15 java spring

我需要在没有构造函数参数的情况下创建一个完整的Object.像这样的东西

Class A  {
  private final int timeOut
  public A(int timeout)
  {
     this.timeOut = timeout;
   }
 //...
}
Run Code Online (Sandbox Code Playgroud)

我希望这个Bean能够进行弹簧管理,以便我以后可以使用Spring AOP.

<bean id="myBean" class="A" singleton="false">
</bean>
Run Code Online (Sandbox Code Playgroud)

但是我的bean需要超时才能作为动态值传递 - 有没有办法在构造函数中创建一个动态值被绑定的spring托管bean?

ska*_*man 25

BeanFactory有一个getBean(String name, Object... args)方法,根据javadoc,它允许你指定用于覆盖bean定义自己的参数的构造函数参数.因此,您可以在beans文件中放置一个默认值,然后在需要时指定"实际"运行时值,例如

<bean id="myBean" class="A" scope="prototype">
   <constructor-arg value="0"/> <!-- dummy value -->
</bean>
Run Code Online (Sandbox Code Playgroud)

然后:

getBean("myBean", myTimeoutValue);
Run Code Online (Sandbox Code Playgroud)

我自己没试过,但它应该有效.

PS scope="prototype"现在更singleton="false"受欢迎,这是不推荐的语法 - 它更明确,但做同样的事情.