1.di:依赖注入,表示创建对象,给属性赋值
2.di的实现有两种:
- 在spring的配置文件中,使用标签和属性完成,叫做基于xml的di实现
- 使用spring中的注解,完成属性赋值,叫做基于注解的di实现
3.di的语法分类:
- set注入(设置注入):spring调用类的set方法,在set方法可以实现属性的赋值,80%左右使用的set注入
- 构造注入,spring调用类的有参数构造方法,创建对象,在构造方法中完成赋值
4.set基本类型赋值 - 创建Student类
public class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
System.out.println("spring调用setName方法");
}
public void setAge(int age) {
this.age = age;
System.out.println("spring调用setAge方法");
}
- 给Student属性赋值
<!--声明student对象-->
<!--
1.set注入(设置注入):spring调用类的set方法,你可以在set方法中完成属性赋值
1)简单类型的set注入,spring中规定java的基本数据类型和String都是简单类型
<bean id="xx" class="yy">
<property name="属性名称" value="此属性的值"/>
一个property只能给一个属性赋值
</bean>
-->
<bean id="myStudent" class="com.chongqing.ba01.Student" >
<property name="name" value="lisi"/>
<property name="age" value="20"/>
</bean>
</beans>
5.注意:
- 如果在student类中没有email属性,但是有setEmail方法,则
<property name="email" value="123@qq.com"/>
也是可以执行的。
- 属性age为int,在配置文件中value的值必须得加引号。
5.引用类型赋值
- 新建一个School类
public class School {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
- 在Student类中新增一个属性
public void setSchool(School school) {
this.school = school;
}
- 配置文件
<!--
2) 引用类型的set注入:spring调用类的set方法
<bean id="xx" class="yy">
<property name="属性名称" ref="beande id(对象的名称)"/>
</bean>
-->
<bean id="myStudent" class="com.chongqing.ba02.Student" >
<property name="name" value="lisi"/>
<property name="age" value="26"/>
<!-- 引用类型的赋值-->
<property name="school" ref="mySchool"/>
</bean>
<bean id="mySchool" class="com.chongqing.ba02.School" >
<property name="name" value="北京大学"/>
<property name="address" value="北京的海淀区"/>
</bean>
6.构造注入
spring调用类的有参构造方法,在创建对象的同时,在构造方法中给属性赋值
构造注入使用constructor-arg标签,一个constructor-arg标签表示构造方法一个标签
其中name:表示构造方法的形参名
index表示构造方法的参数的位置,参数从左往右的位置是0,1,2的属性
value:构造方法的形参类型是简单类型的,使用value
ref:构造方法的形参类型是引用类型的,使用ref
- 创建student的有参构造函数
public Student(String name, int age, School school) {
this.name = name;
this.age = age;
this.school = school;
System.out.println("Strdent类有参数构造方法");
}
- 配置文件,使用name赋值
<bean id="myStudent" class="com.chongqing.ba03.Student" >
<constructor-arg name="name" value="张三"/>
<constructor-arg name="age" value="20"/>
<constructor-arg name="school" ref="mySchool"/>
</bean>
<bean id="mySchool" class="com.chongqing.ba03.School" >
<property name="name" value="北京大学"/>
<property name="address" value="北京的海淀区"/>
</bean>
- 配置文件,使用index赋值,也可以省略index,会默认位置顺序0,1,2
<bean id="myStudent" class="com.chongqing.ba03.Student" >
<constructor-arg index="0" value="张三"/>
<constructor-arg index="1" value="23"/>
<constructor-arg index="2" ref="mySchool"/>
</bean>
<bean id="mySchool" class="com.chongqing.ba03.School" >
<property name="name" value="北京大学"/>
<property name="address" value="北京的海淀区"/>
</bean>