什么是bean管理?
- Bean 管理指的是两个操作:
(1)Spring 创建对象
(2)Spirng 注入属性
- Bean 管理操作有两种方式
(1)基于 xml 配置文件方式实现
(2)基于注解方式实现
# 一.基于Xml方式创建对象
```
//定义User类
public class User {
}
```
1. 在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建.
1. 在 bean 标签有很多属性,介绍常用的属性
- id 属性:唯一标识
- class 属性:类全路径(包类路径)
1. 创建对象时候,默认也是执行无参数构造方法完成对象创建
```
<!--配置User类的对象创建-->
<bean id="user" class="com.spring5.User"></bean>
```
# 二.基于 xml 方式注入属性
DI:依赖注入,就是注入属性
###### 1. 第一种注入方式:使用 set 方法进行注入
```
//定义学生类和对应的set方法
private int age;
private String name;
public class Student {
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
```
在 spring 配置文件进行如下配置
```
<!--使用 property 完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<bean id="student" class="com.spring5.Student">
<property name="age" value="18"></property>
<property name="name" value="张三"></property>
</bean>
```
###### 2. 第二种注入方式:使用有参数构造进行注入
```
//定义学生类和对应的带参构造方法
public class Student {
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
}
```
在 spring 配置文件进行如下配置
```
<!-- 有参数构造注入属性
使用constructor-arg完成属性注入-->
<bean id="student" class="com.spring5.Student">
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="name" value="李四"></constructor-arg>
</bean>
```
# 三.基于xml 注入其他类型属性
###### 1. 字面量
(1)null 值
```
<!--null 值-->
<property name="address">
<null/>
</property>
```
(2)属性值包含特殊符号(使用转义字符或CDATA域实现)
```
<!--属性值包含特殊符号
1 把<>进行转义 < >
2 把带特殊符号内容写到 CDATA
-->
<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
```
###### 2.外部bean
(1)创建两个类 service 类和 dao 类
(2)在 service 调用 dao 里面的方法
(3)在 spring 配置文件中进行配置
```
//创建Dao接口
public interface UserDao {
}
```
```
//创建Dao接口实现类
public class UserDaoImpl implements UserDao {
}
```
在 spring 配置文件进行如下配置
```
<!--1 service 和 dao 对象创建-->
<bean id="userService" class="com.atguigu.spring5.service.UserService">
<!--注入 userDao 对象
name 属性:类里面属性名称
ref 属性:创建 userDao 对象 bean 标签 id 值
-->
<property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>
```
###### 3.内部bean
```
//员工类
public class Emp {
private String ename;
private String gender;
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setGender(String gender) {
this.gender = gender;
}
}
```
```
//部门类
public class Dept {
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
}
```
在 spring 配置文件进行如下配置
```
<bean id="emp" class="com.spring5.bean.Emp">
<property name="ename" value="张三"></property>
<property name="gender" value="女"></property>
<property name="dept" >
<bean id="dept" class="com.spring5.bean.Dept">
<property name="dname" value="安保部"></property>
</bean>
</property>
</bean>
```
# 四.基于xml 注入集合属性
###### 1. 注入普通属性值
创建Stu类,定义数组、list、map、set 类型属性,生成对应 set 方法
```
public class Stu {
//1 数组类型属性
private String[] courses;
//2 list 集合类型属性
private List<String> list;
//3 map 集合类型属性
private Map<String,String> maps;
//4 set 集合类型属性
private Set<String> sets;
public void setSets(Set<String> sets) {
this.sets = sets;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
}
```
在 spring 配置文件进行如下配置
```
<property name="courses">
<array>
<value>java课程</value>
<value>数据库课程</value>
</array>
</property>
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
</list>
</property>
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<property name="sets">
<set>
<value>mysql</value>
<value>redis</value>
</set>
</property>
</bean>
</beans>
```
###### 2.在集合里面设置对象类型值
```
//创建Student类
public class Student {
private List<Course> list;
public void setCourseList(List<Course> courseList) {
this.courseList = courseList;
}
}
```
```
//定义Sources类
public class Course {
private String cname;
public void setCname(String cname) {
this.cname = cname;
}
```
在 spring 配置文件进行如下配置
```
<!--创建多个 course 对象-->
<bean id="course1" class="com.atguigu.spring5.collectiontype.Course">
<property name="cname" value="Spring5 框架"></property>
</bean>
<bean id="course2" class="com.atguigu.spring5.collectiontype.Course">
<property name="cname" value="MyBatis 框架"></property>
</bean>
<!--注入 list 集合类型,值是对象-->
<property name="courseList">
<list>
<ref bean="course1"></ref>
<ref bean="course2"></ref>
</list>
</property>
```