<bean id="systemUserService" class="com.alan.SystemUserServiceImpl">
<if ***>
<property name="exm1" ref="exm1"></property>
</if>
<else if ***>
<property name="exm2" ref="exm2"></property>
</else if>
<else>
<property name="exm3" ref="exm3"></property>
</else>
</bean>
不知道有spring的配置文件有没有以上的实现,根据判断条件来决定注入哪一个对象
++++++++++++++++++++++++++分隔线+++++++++++++++++++++++++++++++++
我所想到的另一途径是
1、新建一个.properties文件,来定义常量,如dubboOrSql=1
2、新建一个工具类ConstantsConfig来读取上面的.properties文件的常量。
3、在serviceImpl类中,对此进行判断 ,来决定实例化哪个对象.
ISystemData sd;
String dubboOrSql = ConstantsConfig.getDubboOrSql();
if("1".equals(dubboOrSql)){
sd = app.getBean("exap1");
}else if("0".equals(dubboOrSql)){
sd = app.getBean("exap2");
}
//后面就是调用sd的一些方法了。
大家讲道理2017-04-18 09:07:01
用屬性設定檔可以解決
1、新增一屬性文件,如config.propertiest,定義鍵值對dao.prefix=.
2、在spring設定檔中設定這個屬性檔。
3、即可在
4、在service中可以進行選擇性注入:
<bean id='sysService' class='com.alan.***Impl>
<property name='***' ref='system${dao.prefix}Dao'>
</bean>
<bean id='systemDao' class='***'/>
<bean id='systemDubboDao class='***'/>
<bean id='systemOtherDao class='***'/>
这样配置的话,就会根据dao.prefix的值来决定注入哪一个DAO了。当dao.prefix=null(即什么都不填是),ref='systemDao'。关键在于bean命名的规律性。
PHP中文网2017-04-18 09:07:01
可以使用Spring的profile來解決這個問題。 profile可以用來在不同的環境下對應不同配置(例如資料庫配置),可以實現你的需求。
下面配置了三個同一個bean在三個profile(dev、test、product)下的不同屬性:
<beans profile="dev">
<bean id="systemUserService" class="com.alan.SystemUserServiceImpl">
<property name="exm1" ref="exm1"></property>
</bean>
</beans>
<beans profile="test">
<bean id="systemUserService" class="com.alan.SystemUserServiceImpl">
<property name="exm2" ref="exm2"></property>
</bean>
</beans>
<beans profile="product">
<bean id="systemUserService" class="com.alan.SystemUserServiceImpl">
<property name="exm3" ref="exm3"></property>
</bean>
</beans>
如何在程式啟動是啟用某個profile,有多種方式,選其一即可:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("dev");
java -jar test.jar -Dspring.profiles.active="dev"
如果是web項目,可以設定web.xml
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
使用不同的profile啟動,就會載入不同的bean和不同的配置。