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

标签 java spring

我需要创建一个没有构造函数参数的不完整对象。像这样的

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/

相关文章:

java - Spring MVC 将参数映射到 .jsp 而不是 @RequestMapping

spring - 具有自己的 UI 和 Spring 和 Thymeleaf 的微服务

java - Spring Web "java.lang.NoClassDefFoundError: antlr/RecognitionException] with root cause"错误

java - Playframework JSR-303 验证 "field"没有对应的数据绑定(bind)访问器

java - 比较两个长度不等的列表并删除部分匹配项?

java - `null` 被当作字符串?

java - Apache Tomcat 上的两个 MySQL 数据源配置

java - Spring:从 Gmail 发送电子邮件

java - Mirth 文件读取器 - Java 堆空间错误

java - 从 Map 中找到的值与相同的哈希码和等于不一致