我试着在春天跟随:
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非常重要!通过这种方式,我很好地利用了Spring,我在那里定义了哪些bean作为子模块(对我来说也适用于其他东西)。他们当然也在相同的环境中生活!对我来说非常重要的是豆子在相同的环境中。
重要:模块由其他开发人员编写,我无法控制他们使用的属性名称。
重要:父模块必须能够运行子模块bean,这意味着父/子在这里不好,子模块也不需要知道父属性,因为它们只是模块。
答案 0 :(得分:1)
您应该为这两个键使用不同的名称。
答案 1 :(得分:0)
考虑使用Parent / Children Spring上下文层次结构。例如,您可以创建父上下文和两个子上下文,将属性文件加载到适当的文件中。在父类中加载的bean在所有子上下文之间共享,但子上下文有自己的bean范围。
您可以在互联网上找到更多信息。