0

春に次のことを試しました:

modules.xml:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <import resource="classpath:module1.xml"></import>
    <import resource="classpath:module2.xml"></import>
</beans>

module1.xml:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:prop1.properties"></property>
    </bean>


    <bean id="bean1" class="Bean1">
        <property name="prop1" value="${key}"/>
    </bean>
</beans>

module2.xml:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:prop2.properties"></property>
    </bean>

    <bean id="bean2" class="Bean2">
        <property name="prop2" value="${key}"/>
    </bean>
</beans>

Bean1.java:

import org.springframework.beans.factory.annotation.Autowired;

public class Bean1 {

    @Autowired
    public String prop1;

    public void setProp1(String val) {
        prop1 = val;
    }
}

bean2.java:

import org.springframework.beans.factory.annotation.Autowired;

public class Bean2 {
    @Autowired
    public String prop2;

    public void setProp2(String val) {
        prop2 = val;
    }
}

ModulesBean.java:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ModulesBean {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
                new String[] {"modules.xml"});
        BeanFactory beanFactory = (BeanFactory) appContext;

        Bean1 bean1 = (Bean1) beanFactory.getBean("bean1");
        System.out.println("prop1: " + bean1.prop1);

        Bean2 bean2 = (Bean2) beanFactory.getBean("bean2");
        System.out.println("prop2: " + bean2.prop2);

    }
}

prop1.properties:

key=value1

prop2.properties:

key=value2

実行すると、結果は次のようになります。

prop1: value1
prop2: value1

ただしbean1、小道具ファイル1から小道具のみを取得する範囲が必要です!!! それはモジュールと他のBean2ものであるためvalue2!!!

それは達成可能ですか?とても基本的だと思います!ありがとう!!!

重要: サブモジュールを含む XML があることは私にとって重要です! このようにして、Springs を適切に XML で利用し、サブモジュールとして持っている Bean を定義します (他のことにも役立ちます)。もちろん、彼らは同じ文脈で生きています!Bean が同じコンテキストにあることは、私にとって非常に重要です。

重要: モジュールは他の開発者によって作成されます。モジュールが使用するプロパティ名を制御する方法はありません。

重要: 親モジュールは子モジュール Bean を実行できる必要があります。つまり、ここでは親/子は適切ではありません。また、子モジュールは単なるモジュールであるため、親プロパティを認識する必要はありません。

4

2 に答える 2

1

2 つのキーには異なる名前を使用する必要があります。

于 2012-08-01T06:39:07.930 に答える
0

Parent/Children Spring コンテキスト階層の使用を検討してください。たとえば、親コンテキストと 2 つの子コンテキストを作成し、プロパティ ファイルを適切なコンテキストにロードできます。親コンテキストにロードされた Bean はすべての子コンテキスト間で共有されますが、子コンテキストには独自の Bean スコープがあります。

詳細については、インターネットを参照してください。

于 2012-08-01T07:08:32.983 に答える