recherche

Maison  >  Questions et réponses  >  le corps du texte

java - spring配置文件如何实现判断语句

<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_leeringa_lee2818 Il y a quelques jours871

répondre à tous(4)je répondrai

  • 大家讲道理

    大家讲道理2017-04-18 09:07:01

    Ce problème peut être résolu à l'aide des fichiers de configuration de propriétés
    1. Ajoutez un fichier de propriétés, tel que config.propertiest, et définissez la paire clé-valeur dao.prefix=.
    2. fichier de configuration du printemps.
    3. Vous pouvez utiliser des variables de fichier d'attributs dans <bean>, telles que ${dao.prefix}
    4. L'injection sélective peut être effectuée en 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命名的规律性。

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 09:07:01

    Vous pouvez utiliser le profil de Spring pour résoudre ce problème. Les profils peuvent être utilisés pour correspondre à différentes configurations (telles que la configuration de la base de données) dans différents environnements pour répondre à vos besoins.

    Ce qui suit configure trois attributs différents du même bean sous trois profils (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>

    Comment activer un profil au démarrage du programme, il existe de nombreuses façons, il suffit d'en choisir une :

    Méthode de code

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

    commande Java-Dspring.profiles.active="dev"

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

    web.xml

    S'il s'agit d'un projet web, vous pouvez configurer web.xml

    <context-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>dev</param-value>
    </context-param>

    Commencer avec différents profils chargera différents beans et différentes configurations.

    répondre
    0
  • 迷茫

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

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:07:01

    Je ne sais pas si Spel peut résoudre le problème, vous pouvez le rechercher et voir

    répondre
    0
  • Annulerrépondre