如何使用框架有条件地从外部注入Bean(而不创建工厂类)?

在下面的场景中,两个childBean都已经被实例化,但是会在运行时根据条件注入到父bean中。

<bean id=ChildBean1>
<bean id=ChildBean2>
<parentBean name='parentBean' lazy-init="true">
   <property name='flag'>

   <somecondition flag=1/>
   <property name='child' ref ='childBean1'/>
   <somecondition flag=2/>
   <property name='child' ref ='childBean2'/>
</parentBean>

最佳答案

您可以通过spring表达式语言(SpEL)来实现:

<bean class="com.example.spring.TestBean">
    <property name="dependency" value="#{systemProperties['profile'] == 'test' ? dependencyA : dependencyB}" />
</bean>


也可以使用Java Config,如下所示:

@Bean
public HelloBean helloBean() {
    HelloBean helloBean = new HelloBean ();
    if (condition) {
        helloBean.setDependency(dependencyA());
    } else {
        helloBean.setDependency(dependencyB());
    }
    return helloBean;
}

10-07 22:45