依赖注入分为三种方式:
1.1构造器注入
构造器通过构造方法实现,构造方法有无参数都可以。在大部分情况下我们都是通过类的构造器来创建对象,Spring也可以采用反射机制通过构造器完成注入,这就是构造器注入的原理。
代码清单:构造器注入
1 package com.spring.chapter3;
2
3 public class Role {
4
5 private long id;
6 private String roleName;
7
8 public Role(long id,String roleName){
9 this.id=id;
10 this.roleName=roleName;
11
12 }
13 public void getCount(){
14 System.out.println("Role已被调用"+"\n"+"id:"+id+"\n"+"roleName:"+roleName);
15
16 }
17
18 }
代码清单:构造器配置
1 <bean id="Role" class="com.spring.chapter3.Role">
2 <constructor-arg index="0" value="007"></constructor-arg>
3 <constructor-arg index="1" value="zhangqiang"></constructor-arg>
4 </bean>
元素名 | 作用 | 优缺点 |
|
|
|
|
| |
|
|
1.2使用setter注入
注意对应的实体类属性必须实现set,get方法。如果实体类没有属性也会被注入)。
1 package com.spring.chapter3;
2
3 public class Role {
4
5 public long getId() {
6 return id;
7 }
8 public void setId(long id) {
9 this.id = id;
10 }
11 public String getRoleName() {
12 return roleName;
13 }
14 public void setRoleName(String roleName) {
15 this.roleName = roleName;
16 }
17 private long id;
18 private String roleName;
19
20 }
Bean配置xml
1 <bean id="Role" class="com.spring.chapter3.Role">
2 </bean>
2.1 注入内部Bean
注入内部Bean跟setter注入是差不多的,不用多说直接看代码。
代码清单:内部Bean注入
1 package com.spring.chapter3;
2
3 public class Role {
4
5 public int getId() {
6 return id;
7 }
8
9 public void setId(int id) {
10 this.id = id;
11 }
12
13 public String getRoleName() {
14 return RoleName;
15 }
16
17 public void setRoleName(String roleName) {
18 RoleName = roleName;
19 }
20
21 public DomePojo getDomePojo() {
22 return domePojo;
23 }
24
25 public void setDomePojo(DomePojo domePojo) {
26 this.domePojo = domePojo;
27 }
28
29 private DomePojo domePojo; //注意这里是类变量
30 private int id;
31 private String RoleName;
32 public void getCount(){
33 System.out.println("我是Role类的方法");
34 }
35 }
代码清单:内部 bean 为基于 setter 注入进行配置的配置文件 Spring.xml 文件:
1 <bean id="DomePojo" class="com.spring.chapter3.DomePojo">
2
3 </bean>
4 <bean id="Role" class="com.spring.chapter3.Role">
5 <property name="id" value="007"></property>
6 <property name="RoleName" value="zhangqiang"></property>
7 <property name="DomePojo" ref="DomePojo"></property>
8 </bean>
property name对应pojo中的属性(类变量),ref关联到对应Bean的id (注意:ref关联的Bean一定要在Spring Ioc容器中定义,否则会报错)
2.2 注入集合
如果想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:
元素 | 描述 |
<list> | 它有助于连线,如注入一列值,允许重复。 |
<set> | 它有助于连线一组值,但不能重复。 |
<map> | 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。 |
<props> | 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。 |
代码清单:Pojo实体类(注意必须setter方法)
1 package com.spring.chapter4;
2
3 import java.util.List;
4 import java.util.Set;
5
6 public class Collection {
7 public Set getAddSet() {
8 return addSet;
9 }
10
11 public void setAddSet(Set addSet) {
12 this.addSet = addSet;
13 }
14
15 public List getAddList() {
16 return addList;
17 }
18
19 public void setAddList(List addList) {
20 this.addList = addList;
21 }
22
23 private Set addSet;
24 private List addList;
25
26 public void getCount(){
27 System.out.println("我是Role类的方法");
28 }
29 }
代码清单:Bean配置
1 <bean id="Collection" class="com.spring.chapter4.Collection">
2 <property name="addList">
3 <list>
4 <value>1</value>
5 <value>2</value>
6 <value>3</value>
7 <value>4</value>
8 </list>
9 </property>
10 <property name="addSet">
11 <set>
12 <value>6</value>
13 <value>7</value>
14 <value>8</value>
15 <value>9</value>
16 </set>
17 </property>
18 </bean>
19
测试结果:
、
学习本是一个不断抄袭、模仿、练习、创新的过程。 虽然,已有本人无法超越的同主题博文,为什么还是要写。 对于自己,博文只是总结。在总结的过程发现问题,解决问题。 对于他人,在此过程如果还能附带帮助他人,那就再好不过了。 由于博主能力有限,文中可能存在描述不正确,欢迎指正、补充! 感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。