所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。

使用构造器注入

 
1
2
3
4
//构造器注入
 
>
//构造器注入

PS:其中index的值代表构造器的第几个参数,type代表属性类型,value的值的类型为基本类型,ref的值为引用bean的名字。

范例:

配置文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
?>
>
 
</bean>
</constructor-arg>
</constructor-arg>
</bean>
 
</beans>

依赖对象类:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
;
;
;
 
{
 
;
;
{
;
;
;
}
 
{
;
}
 
 
{
;
}
 
 
{
;
}
 
 
{
;
}
 
 
{
;
;
}
}

使用属性setter方法注入

基本类型对象注入:

 
1
2
3
>
>
>

示例:

配置文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
?>
>
 
>
>
>
>
>
>
 
>

bean类:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
;
 
;
;
 
{
 
;
;
;
{
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
{
;
;
;
}
}

注入其他bean:

方式一

 
1
2
3
4
>
>
>
>

PS:其中name为属性名称,ref是要注入bean的名称

示例:

DAO层:

 
1
2
3
4
5
6
7
8
9
10
11
12
;
{
;
}
 
;
;
{
{
;
}
}

业务层:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;
 
;
;
{
;
{
;
}
 
{
;
}
 
{
;
}
 
}

测试:

 
1
2
3
4
;
;
;
;

配置文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
?>
>
 
</bean>
</property>
</bean>
 
</beans>

测试结果:执行dao的方法

方式二(使用内部bean,但该bean不能被其他bean使用,不推荐)

 
1
2
3
4
5
</property>
</bean>

集合类型的装配:

Spring可以对集合类型进行注入包括:Set集合,properties属性集合,Map集合以及List集合。

注入方式如下:

配置文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<list>
</value>
</value>
</list>
</property>
<set>
</value>
</value>
</set>
</property>
<map>
</map>
</property>
<props>
</prop>
</prop>
</props>
</property>
</bean>

编码模拟Spring使用属性setter方法注入的原理:

简单模拟的Spring容器:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
;
 
;
;
;
;
;
;
;
;
;
;
 
;
;
;
;
/*
 * 简单模拟Spring容器
 */
{
 
//保存bean的信息
//引用所有bean对象
 
{
;
;
//依赖注入
}
 
/*
 * 为bean属性注入值
 */
{
{
//此时bean还没有注入
//下面开始进行依赖注入
{
//取得bean的属性描述
{
//bean的属性
//用户配置文件中定义的属性
{
//判断配置文件中属性的名称和bean中属性的名称是否相同
{
//获得属性的setter方法
{
;
{
;
{
;
//把引用对象注入到属性
}
{
.
}
/*
 * 完成bean的实例化
 */
{
{
{
;
{
// TODO Auto-generated catch block
;
}
}
/*
 * 读取XMl配置文件
 * @param filename
 */
{
;
;
{
;
;
;
//加入命名空间
//创建beans/bean查询路径
//设置命名空间
;
{
;
;
;
//nodename(节点名称):表示选择该节点的所有子节点
;
;
{
;
;
;
;
}
;
}
}
{
;
}
}
/*
 *获取bean实例
 */
{
;
}
}

Bean属性信息:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
;
 
;
;
{
;
;
;
{
;
}
{
;
}
 
{
;
}
 
{
;
;
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
{
;
}
}

Property信息:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
;
{
{
;
;
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
{
;
}
 
;
;
}

测试类:

 
 
 
 
 
Java
 
1
2
3
4
5
6
7
8
 
@Test
{
 
;
;
;
 
}

相关文章: