我会建议 4 种方法中的 1 种(选项 2、3 和 4 都是一样的,只是代码放在哪里的问题):
1.弹簧型材,例如:
<beans profile="valid">
...
define 'b1' using 'bean2'
...
</beans>
<beans profile="invalid">
...
define 'b1' using 'bean3'
...
</beans>
然后在您的代码中的某个地方,您必须根据情况启用正确的配置文件dbInfo.isValidUser
- 这是在 Spring Context 引导时完成的。
2.使用工厂方法创建需要注入的bean:
<bean id="b1" class="someClass" factory-method="createDependingUponValidUser">
<property name="validbean" ref="bean2"/>
<property name="invalidbean" ref="bean3"/>
<property name="dbinfo" ref="dbinfo"/>
</bean>
使用工厂方法:
public static SomeClass createDependingUponValidUser(DatabaseProperties dbinfo, SomeClass1 bean2, SomeClass2 bean3) {
SomeClass b1 = new SomeClass();
b1.setProp1(dbInfo.isValidUser() ? bean2 : bean3);
return b1;
}
3.使用基于 Java 的 Spring Context Config
@Configuration
public class AppConfig {
@AutoWired
@Bean(name="b1")
public SomeCLass b1(DatabaseProperties dbinfo, SomeClass1 bean2, SomeClass2 bean3) {
SomeClass b1 = new SomeClass();
b1.setProp1(dbInfo.isValidUser() ? bean2 : bean3);
return b1;
}
}
(Java 风格的配置和 XML 风格的配置可以混合使用 :-)
4.在构造函数(或方法)中做switchSomeClass
setProp1()
'b1'
public SomeClass(DatabaseProperties dbinfo, SomeClass1 bean2, SomeClass2 bean3) {
this.prop1 = dbInfo.isValidUser() ? bean2 : bean3;
}