在XML檔案中進行配置、對象的建立呀、屬性的指派呀…全部在XML配置檔案中配置。更像是配置開發
1、什麼是 Bean 管理
Bean 管理指的是兩個操作
- Spring 建立對象
- Spirng 注入屬性
2、Bean 管理操作有兩種方式
- 1、基于 xml 配置檔案方式實作
- 2、基于注解方式實作
3、基于XML方式實作
3.1 建立對象
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO1QDOyMWYmhDZwYDZ0czMzYzXyETMxQDMxAzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
(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叫容易維護)