java - spring配置文件如何实现判断语句
ringa_lee
ringa_lee 2017-04-18 09:05:01
0
4
842
<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的一些方法了。
ringa_lee
ringa_lee

ringa_lee

membalas semua(4)
大家讲道理

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命名的规律性。
洪涛

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:

Kaedah kod

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("dev");

arahan java-Dspring.profiles.active="dev"

java -jar test.jar -Dspring.profiles.active="dev"

web.xml

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.

迷茫
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;
    }
}
巴扎黑

Saya tidak tahu sama ada ejaan boleh menyelesaikan masalah, anda boleh cari dan lihat

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan