我試圖在以下彈簧:如何在Spring中擁有多個模塊的多個屬性?
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對我很重要!通過這種方式,我利用彈簧很好的XML,在那裏我定義了哪些bean作爲子模塊(對我來說也是有用的)。當然,他們也生活在相同的環境中!對我來說非常重要的是,豆類在相同的環境中。
重要:模塊是由其他開發人員編寫的,我無法控制他們使用哪些屬性名稱。
重要:父模塊必須能夠運行子模塊bean,這意味着父/子在這裏不好,子模塊也不需要知道父屬性,因爲它們只是模塊。
但是如果我讓別人開發一個模塊(比如一個插件),並且他使用了一些偶然在父類中定義的「key」,那麼他的模塊會收到它嗎?我希望這些模塊能夠分別定義模塊創建者彼此之間以及包含者之間不相互通信的屬性,因此碰撞可能會發生,我不希望模塊從其他模塊或父類獲取屬性。 – Jas 2012-08-01 10:16:43
另外我不能使用父/子上下文,因爲我需要我的父上下文來注意子上下文中的bean,因爲它使用它們,它將遍歷子上下文中的每個bean(如果我們使用子上下文) - 將使用每個模塊中的每個bean並依次運行它們。 – Jas 2012-08-01 10:23:47