`
jiqimiao
  • 浏览: 58950 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

Spring笔记之五(Hierarchical Bean Factory Usage)

 
阅读更多

转贴处 http://www.blogjava.net/improviser/archive/2007/09/25/147934.html

本文研究Spring分层Bean Factory用法,先看有关代码:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 parent.xml
2
3<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
4<beans>
5<beanid="injectBean"class="java.lang.String">
6<constructor-arg>
7<value>BeanInParent</value>
8</constructor-arg>
9</bean>
10<beanid="injectBeanParent"class="java.lang.String">
11<constructor-arg>
12<value>BeanInParent</value>
13</constructor-arg>
14</bean>
15</beans>


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1beans.xml
2
3<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
4<beans>
5<!--hierarchicalbeanfactories-->
6<beanid="target1"class="SimpleTarget">
7<propertyname="val">
8<refbean="injectBeanParent"/>
9</property>
10</bean>
11
12<beanid="target2"class="SimpleTarget">
13<propertyname="val">
14<reflocal="injectBean"/>
15</property>
16</bean>
17
18<beanid="target3"class="SimpleTarget">
19<propertyname="val">
20<refparent="injectBean"/>
21</property>
22</bean>
23
24<beanid="injectBean"class="java.lang.String">
25<constructor-arg>
26<value>BeanInChild</value>
27</constructor-arg>
28</bean>
29</beans>
30


SimpleTarget中只有一属性String val


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1publicstaticvoidmain(String[]args){
2BeanFactoryparent=newXmlBeanFactory(newFileSystemResource(
3"build/parent.xml"));
4BeanFactorychild=newXmlBeanFactory(newFileSystemResource(
5"build/beans.xml"),parent);
6
7SimpleTargettarget1=(SimpleTarget)child.getBean("target1");
8SimpleTargettarget2=(SimpleTarget)child.getBean("target2");
9SimpleTargettarget3=(SimpleTarget)child.getBean("target3");
10
11System.out.println(target1.getVal());
12System.out.println(target2.getVal());
13System.out.println(target3.getVal());
14}


运行结果:
Bean In Parent
Bean In Child
Bean In Parent

分析过程:
在bean factory被加载过程中分别加载各层Bean Factory,
BeanFactoryparent=newXmlBeanFactory(newFileSystemResource("build/parent.xml"));
BeanFactorychild=newXmlBeanFactory(newFileSystemResource("build/beans.xml"),parent);
其中parent参数指定了bean factory间的父子关系。

分析结果:
第一行结果为在父factory中定义的参数,说明在子fantory中可以直接调用父fantory元素,类似于java中的继承关系。
第二行结果说明
<reflocal="injectBean"/>中local指向本fantory元素。
第三行结果为Bean In Parent,说明
<refparent="injectBean"/>中parent指向父fantory中元素。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics