带有运行时构造函数参数的Spring bean

我想在 创建一个Spring bean,并在运行时传递一些构造函数参数。我创建了以下Java配置,其中有一个bean

,它在构造函数中需要一些参数。

@Configuration

public 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

@Configuration

public 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的实例,您必须执行以下操作。

@Controller

public class ExampleController{

@Autowired

private BeanFactory beanFactory;

@RequestMapping("/")

public String exampleMethod(){

TdctFixedLengthReport report =

beanFactory.getBean(TdctFixedLengthReport.class, "sourceSystem");

}

}

注意,由于无法在启动时实例化bean,因此不能直接自动装配bean。否则,Spring将尝试实例化bean本身。这种用法将导致错误。

@Controller

public class ExampleController{

//next declaration will cause ERROR

@Autowired

private TdctFixedLengthReport report;

}

以上是 带有运行时构造函数参数的Spring bean 的全部内容, 来源链接: utcz.com/qa/417795.html

回到顶部