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 < bean id ="injectBean" class ="java.lang.String" >
6 < constructor-arg >
7 < value > BeanInParent </ value >
8 </ constructor-arg >
9 </ bean >
10 < bean id ="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 /> --> 1 beans.xml
2
3 <! DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
4 < beans >
5 <!-- hierarchicalbeanfactories -->
6 < bean id ="target1" class ="SimpleTarget" >
7 < property name ="val" >
8 < ref bean ="injectBeanParent" />
9 </ property >
10 </ bean >
11
12 < bean id ="target2" class ="SimpleTarget" >
13 < property name ="val" >
14 < ref local ="injectBean" />
15 </ property >
16 </ bean >
17
18 < bean id ="target3" class ="SimpleTarget" >
19 < property name ="val" >
20 < ref parent ="injectBean" />
21 </ property >
22 </ bean >
23
24 < bean id ="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 /> --> 1 public static void main(String[]args){
2 BeanFactoryparent = new XmlBeanFactory( new FileSystemResource(
3 " build/parent.xml " ));
4 BeanFactorychild = new XmlBeanFactory( new FileSystemResource(
5 " build/beans.xml " ),parent);
6
7 SimpleTargettarget1 = (SimpleTarget)child.getBean( " target1 " );
8 SimpleTargettarget2 = (SimpleTarget)child.getBean( " target2 " );
9 SimpleTargettarget3 = (SimpleTarget)child.getBean( " target3 " );
10
11 System.out.println(target1.getVal());
12 System.out.println(target2.getVal());
13 System.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中元素。

你可能感兴趣的:(spring笔记)