我有什么已知的方式来基于某些条件在春季IoC容器中注入bean。例如。我有两个豆子:春季IoC容器中的条件
<bean id="aaa" class="My"/>
<bean id="bbb" class="My"/>
...并希望根据以下规则在另外一个bean注入它:
注入“AAA”如果“AAA”不为空或注入“BBB”另一种情况
感谢
我有什么已知的方式来基于某些条件在春季IoC容器中注入bean。例如。我有两个豆子:春季IoC容器中的条件
<bean id="aaa" class="My"/>
<bean id="bbb" class="My"/>
...并希望根据以下规则在另外一个bean注入它:
注入“AAA”如果“AAA”不为空或注入“BBB”另一种情况
感谢
您可以使用JavaConfig - 那里,你可以使用Java代码来实现这个逻辑。我从来没有使用过它,但服用从文档的例子:
@Configuration
public class ServiceConfig {
private @Resource(name="aaa") Aaa aaa;
private @Resource(name="bbb") Aaa bbb;
public @Bean TransferService transferService() {
TransferService service = new TransferServiceImpl();
if (aaa != null) {
service.setProperty(aaa);
} else {
service.setProperty(bbb);
}
return service;
}
}
另一种选择是使用FactoryBean
来封装逻辑 - 工厂bean可以查找在上下文中的豆,如果找到了 - 回报它。如果找不到 - 查找另一个bean。
...然后在XML中声明'ServiceConfig'本身就是一个bean。 – skaffman 2011-03-23 16:21:58
如果您使用的是3.0版本,则可以使用SpEL - Expression langauge support来实现。
您能否给我们一个适合问题的例子,而不是仅仅链接到文档? – skaffman 2011-03-23 16:08:19
我已经使用FactoryBean来解决这个问题。 – Raman 2011-03-31 15:32:12