2

システムプロパティを介してSpringエイリアス構成を変更できるかどうかを調べようとしています。

それが構成です:

<beans>
    <bean id="beanOne" ... />
    <bean id="beanTwo" ... />
    <bean id="beanThree" ... />
    <alias name="beanOne" alias="beanToUse" />

    <bean id="consumer" ...>
        <constructor-arg ref="beanToUse" />
    </bean>
</beans>

-Duse=beanThreeエイリアスに別の Bean を選択するなど、JVM プロパティを使用できるようにしたいと考えています。

残念ながら、単純なソリューションを使用<alias name="#{systemProperties.use}" alias="beanToUse" />すると例外がスローされNoSuchBeanDefinitionExceptionます:(

助言がありますか?

4

2 に答える 2

2

spring 3.1 プロファイルを使用しようとしましたか?

<beans>
    <bean id="beanOne" ... />
    <bean id="beanTwo" ... />
    <bean id="beanThree" ... />
    <beans profile="A">
      <alias name="beanOne" alias="beanToUse" />
    </beans>

    <beans profile="B">
      <alias name="beanTwo" alias="beanToUse" />
    </beans>

    <bean id="consumer" ...>
        <constructor-arg ref="beanToUse" />
    </bean>
</beans>

システムプロパティから選択します-Dspring.profiles.active=A。プロファイルでエイリアスを試したことはありませんがbeanToUse、各プロファイルで別の定義を使用できます。

<beans>
    <beans profile="A">
      <bean id="beanToUse" ... defined as beanOne ... />
    </beans>

    <beans profile="B">
      <bean id="beanToUse" ... defined as beanTwo .../>
    </beans>

    <bean id="consumer" ...>
        <constructor-arg ref="beanToUse" />
    </bean>
</beans>
于 2012-09-07T10:57:20.637 に答える
1

SpEL を使用してこれを行う別の方法を次に示します。Bean ID testDataStrategy と realDataStrategy を持つ DataStrategy タイプの2つの実装があります

Java プロジェクトのプロパティ ファイルでプロパティ「data.strategy」を設定することで、Bean を選択できます。

<bean id="myBeanId" class="com.some.path.MyBeanClass" >
    <property name="dataStrategy" value="#   {'${data.strategy}'.equalsIgnoreCase('TEST_DATA') ? testDataStrategy : realDataStrategy}" />
</bean>
于 2014-07-02T07:51:16.860 に答える