Springノートの5(階層Bean Factory使用)

5195 ワード

本論文ではSpring階層Bean Factoryの使用法を検討し、まず関連コードを参照する.
 1 parent
.xml
 2 
 3 
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"      "http://www.springframework.org/dtd/spring-beans.dtd"
>
 4 
<
beans
>
 5 
    
<
bean 
id
="injectBean"
 class
="java.lang.String"
>
 6 
           
<
constructor-arg
>
 7 
               
<
value
>
Bean In Parent
value
>
 8 
           
constructor-arg
>
 9 
    
bean
>
10 
    
<
bean 
id
="injectBeanParent"
 class
="java.lang.String"
>
11 
           
<
constructor-arg
>
12 
               
<
value
>
Bean In Parent
value
>
13 
           
constructor-arg
>
14 
    
bean
>
15 
beans
>
 
 1 
beans.xml
 2 
 3 
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    "http://www.springframework.org/dtd/spring-beans.dtd"
>
 4 
<
beans
>
 5 
    

 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
>
Bean In Child
value
>
27 
           
constructor-arg
>
28 
    
bean
>
29 
beans
>
30  SimpleTarget String val
 1 
public
 
static
 
void
 main(String[] args) {
 2 
        BeanFactory parent 
=
 
new
 XmlBeanFactory(
new
 FileSystemResource(
 3 
                
"
build/parent.xml
"
));
 4 
        BeanFactory child 
=
 
new
 XmlBeanFactory(
new
 FileSystemResource(
 5 
                
"
build/beans.xml
"
), parent);
 6 
 7 
        SimpleTarget target1 
=
 (SimpleTarget) child.getBean(
"
target1
"
);
 8 
        SimpleTarget target2 
=
 (SimpleTarget) child.getBean(
"
target2
"
);
 9 
        SimpleTarget target3 
=
 (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 ParentBean In ChildBean In Parent分析プロセス:bean factoryがロードされる過程で各層のBean Factoryがそれぞれロードされ、
BeanFactory parent 

new
 XmlBeanFactory(
new
 FileSystemResource(
"
build/parent.xml
"
));
BeanFactory child 

new
 XmlBeanFactory(
new
 FileSystemResource(
"
build/beans.xml
"
), parent);parentパラメータはbean factory間の親子関係を指定します.解析結果:最初の行の結果は、javaの継承関係と同様に、親factoryで定義されたパラメータであり、子fantoryで親fantory要素を直接呼び出すことができることを示します.2行目の結果の説明
<
ref 
local
="injectBean"
/>のlocalは、このfantory要素を指します.3行目の結果はBean In Parentで、説明
<
ref 
parent
="injectBean"
/>のparentは、親fantoryの要素を指します.