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
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の要素を指します.
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の要素を指します.