在XML文件中进行配置、对象的创建呀、属性的赋值呀…全部在XML配置文件中配置。更像是配置开发
1、什么是 Bean 管理
Bean 管理指的是两个操作
- Spring 创建对象
- Spirng 注入属性
2、Bean 管理操作有两种方式
- 1、基于 xml 配置文件方式实现
- 2、基于注解方式实现
3、基于XML方式实现
3.1 创建对象
(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
(2)在 bean 标签有很多属性,介绍常用的属性
- id 属性:唯一标识
- class 属性:类全路径(包类路径)
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
3.2 注入属性
DI:依赖注入,就是注入属性
3.2.1 第一种注入方式:使用set方法进行注入
- 1、创建类,在类中定义属性和对应的set方法
- 2、在 spring 配置文件配置对象创建,配置属性注入
友情提示:使用set方式进行属性的注入、需要在类中、手动填写setXXX
。如果使用lombok生成的setXXX、似乎不可以
定义Dog类
package com.zyz.spring5;
/**
* @author 静小文
* @version 1.0
* @data 2022/9/21 23:02
*/
public class Dog {
/**
* 创建属性
*/
private String name;
private String kind;
/**
* 创建对应的set方法
*/
public void setName(String name){
this.name = name;
}
public void setKind(String kind){
this.kind = kind;
}
public void testDog(){
System.out.println("小狗的品种是:"+ this.kind+",小狗的名字是:"+this.name);
}
}
编写配置文件
<!-- set方法注入属性-->
<bean id="dog" class="com.zyz.spring5.Dog">
<!--使用 property 完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<property name="kind" value="哈巴狗"/>
<property name="name" value="旺财"/>
</bean>
测试结果
3.2.2 第二种注入方式:使用过有参构造函数进行注入
- 1、创建类,定义属性,创建属性对应有参数构造方法
- 2、在 spring 配置文件中进行配置
Cat类
package com.zyz.spring5;
/**
* @author 静小文
* @version 1.0
* @data 2022/9/21 23:19
*/
public class Cat {
/**
* 创建属性
*/
private String name;
private String kind;
/**
* 有参构造函数
* @param name
* @param kind
*/
public Cat(String name,String kind){
this.kind = kind;
this.name = name;
}
public void testCat(){
System.out.println("小猫的品种是:"+ this.kind+",小猫的名字是:"+this.name);
}
}
配置文件
<!-- 有参函数构造属性-->
<bean id="cat" class="com.zyz.spring5.Cat">
<!--使用 property 完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<constructor-arg name="kind" value="波斯猫"/>
<constructor-arg name="name" value="招财猫"/>
</bean>
测试结果
3.3 注入其他类型属性
3.3.1 注入null值(字面量)
不写value值、直接写null
测试结果
3.3.2 属性值包含特殊符号
测试结果
如果特殊字符不进行转义、会报错哦
3.3.3 注入属性、外部bean(其他对象作为该类的属性)
1、创建一个接口CatDao、该接口的实现类:CatDaoImpl
2、创建一个类CatService、在该类中调用CatDao接口中的方法
3、在xml配置文件中进行配置
CatDao
package com.zyz.spring5.dao;
/**
* @author Lenovo
* @version 1.0
* @data 2022/9/25 15:38
*/
public interface CatDao {
public void say();
}
CatDaoImpl
package com.zyz.spring5.dao;
/**
* @author Lenovo
* @version 1.0
* @data 2022/9/25 15:41
*/
public class CatDaoImpl implements CatDao{
@Override
public void say() {
System.out.println("CatDaoSay........");
}
}
CatService
package com.zyz.spring5.service;
import com.zyz.spring5.dao.CatDao;
/**
* @author Lenovo
* @version 1.0
* @data 2022/9/25 15:42
*/
public class CatService {
private CatDao catDao;
public void setCatDao(CatDao catDao){
this.catDao = catDao;
}
public void say(){
System.out.println("CatServiceSay........");
catDao.say();
}
}
xml配置文件
<bean id="catservice" class="com.zyz.spring5.service.CatService">
<!--注入 CatDao 对象
name 属性:类里面属性名称
ref 属性:创建 userDao 对象 bean 标签 id 值
-->
<property name="catDao" ref="catdaoimpl"/>
</bean>
<bean id="catdaoimpl" class="com.zyz.spring5.dao.CatDaoImpl"></bean>
测试结果
3.3.4 注入属性、内部bean
比如:一对多关系。一个部门有多个员工。这里的一是部门、多是员工。可以将部门作为一个员工的属性(员工隶属于哪个部门)
部门类:Department
package com.zyz.spring5.dao;
/**
* @author Lenovo
* @version 1.0
* @data 2022/9/25 16:34
*/
public class Department {
private String dname;
public void setDname(String dname){
this.dname = dname;
}
@Override
public String toString() {
return "Department{" +
"dname='" + dname + '\'' +
'}';
}
}
员工类:Employee
package com.zyz.spring5.dao;
/**
* @author Lenovo
* @version 1.0
* @data 2022/9/25 16:35
*/
public class Employee {
private String ename;
private String gender;
/**
* 所属部门
*/
private Department department;
public void setEname(String ename){
this.ename = ename;
}
public void setGender(String gender){
this.gender = gender;
}
public void setDepartment(Department department){
this.department = department;
}
public void say(){
System.out.println("我的部门是:"+department+" 姓名:"+this.ename+" 性别:"+this.gender);
}
}
编写的配置类
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="employee" class="com.zyz.spring5.dao.Employee">
<property name="ename" value="张三"/>
<property name="gender" value="男"/>
<property name="department">
<bean id="department" class="com.zyz.spring5.dao.Department">
<property name="dname" value="开发部门"/>
</bean>
</property>
</bean>
</beans>
测试结果
内部bean可以改为外部bean(外部bean叫容易维护)
测试结果