Rumah > Soal Jawab > teks badan
<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
Ia boleh diselesaikan menggunakan fail konfigurasi sifat
1 Tambahkan fail sifat, seperti config.propertiest, dan tentukan pasangan nilai kunci dao.prefix=.
2 fail konfigurasi spring.
3. Anda boleh menggunakan pembolehubah fail atribut dalam <bean>, seperti ${dao.prefix}
4 Suntikan terpilih boleh dilakukan dalam perkhidmatan:
<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
Anda boleh menggunakan profil Spring untuk menyelesaikan masalah ini. Profil boleh digunakan untuk sepadan dengan konfigurasi yang berbeza (seperti konfigurasi pangkalan data) dalam persekitaran yang berbeza untuk memenuhi keperluan anda.
Yang berikut mengkonfigurasikan tiga atribut berbeza bagi kacang yang sama di bawah tiga profil (dev, ujian, produk):
<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>
Bagaimana untuk mendayakan profil apabila program bermula, terdapat banyak cara, cuma pilih satu:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("dev");
java -jar test.jar -Dspring.profiles.active="dev"
Jika ia adalah projek web, anda boleh mengkonfigurasi web.xml
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
Bermula dengan profil yang berbeza akan memuatkan kacang yang berbeza dan konfigurasi yang berbeza.
迷茫2017-04-18 09:07:01
SystemUserServiceImpl implements InitializingBean, ApplicationContextAware {
private ApplicationContext applicationContext;
public void afterPropertiesSet() throws java.lang.Exception {
if (***) {
this.exm1 = applicationContext.getBean("exap1");
} else {
this.exm2 = applicationContext.getBean("exap2");
}
}
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
this.applicationContext= ctx;
}
}
巴扎黑2017-04-18 09:07:01
Saya tidak tahu sama ada ejaan boleh menyelesaikan masalah, anda boleh cari dan lihat