带有运行时构造函数参数的Spring bean
我想在 创建一个Spring bean,并在运行时传递一些构造函数参数。我创建了以下Java配置,其中有一个bean
,它在构造函数中需要一些参数。
@Configurationpublic class AppConfig {
@Autowrire
Dao dao;
@Bean
@Scope(value = "prototype")
**//SourceSystem can change at runtime**
public FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
}
但是我收到错误消息, 未找到bean 导致 无法连接。如何使用运行时构造函数参数创建bean?
我正在使用Spring 4.2
回答:
您可以将原型bean与一起使用BeanFactory
。
@Configurationpublic class AppConfig {
@Autowired
Dao dao;
@Bean
@Scope(value = "prototype")
public FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
}
@Scope(value =
"prototype")意味着Spring不会在启动时立即实例化Bean,而是稍后在需要时进行实例化。现在,要定制原型bean的实例,您必须执行以下操作。
@Controllerpublic class ExampleController{
@Autowired
private BeanFactory beanFactory;
@RequestMapping("/")
public String exampleMethod(){
TdctFixedLengthReport report =
beanFactory.getBean(TdctFixedLengthReport.class, "sourceSystem");
}
}
注意,由于无法在启动时实例化bean,因此不能直接自动装配bean。否则,Spring将尝试实例化bean本身。这种用法将导致错误。
@Controllerpublic class ExampleController{
//next declaration will cause ERROR
@Autowired
private TdctFixedLengthReport report;
}
以上是 带有运行时构造函数参数的Spring bean 的全部内容, 来源链接: utcz.com/qa/417795.html