use*_*818 1 java spring javabeans
我的应用可以在不同的环境中运行.我需要为每个环境配置MY数据模型.数据模型使用Spring bean构建.
我使用Spring 3.0.5,所以我无法有条件地加载资源.我有这个:
<bean id="Template1" class="...
..............
</bean>
<bean id="Template2" class="...
..............
</bean>
<bean id="Template3" class="...
..............
</bean>
................
<bean id="Factory" ...>
<propety name="type"><value>${app.type}</value></property>
<property>
<map>
<entry key="Temlate1" value-ref="Template1">
<entry key="Temlate2" value-ref="Template1">
<entry key="Temlate3" value-ref="Template1">
..................
Run Code Online (Sandbox Code Playgroud)
我工厂创建的真正的豆子:
<bean id="real" factory="Factory" factory-method="getInstance"
<constructor-arg>Factory</.....
.............
</bean>
Run Code Online (Sandbox Code Playgroud)
Java代码:
class Factory {
private Map<String, Object> templateBeans;
Object getInstance(String name) {
return templateBeans.get(name);
...........
Run Code Online (Sandbox Code Playgroud)
是否有可能以某种方式声明抽象模板bean?因为我对记忆有很大的问题.是否有另一种方法可以在版本3.1之前的Spring中有条件地实例化不同的bean?最好只使用EL,因为我无法访问bean的Java代码,因为它们来自第三方库.
我没有试过这个,但我相当肯定你可以使用bean别名.
首先将所有模板bean声明为lazy,这样它们就不会在启动时实例化.
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
Run Code Online (Sandbox Code Playgroud)
然后使用带有变量的bean别名指向真实的变量:
<alias name="real" alias="${beanForEnvironment}"/>
Run Code Online (Sandbox Code Playgroud)
请参阅我的答案,了解如何为每个环境很好地加载属性:
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |