天天看點

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

在XML檔案中進行配置、對象的建立呀、屬性的指派呀…全部在XML配置檔案中配置。更像是配置開發

1、什麼是 Bean 管理

Bean 管理指的是兩個操作

  • Spring 建立對象
  • Spirng 注入屬性

2、Bean 管理操作有兩種方式

  • 1、基于 xml 配置檔案方式實作
  • 2、基于注解方式實作

3、基于XML方式實作

3.1 建立對象

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

(1)在 spring 配置檔案中,使用 bean 标簽,标簽裡面添加對應屬性,就可以實作對象建立

(2)在 bean 标簽有很多屬性,介紹常用的屬性

  • id 屬性:唯一辨別
  • class 屬性:類全路徑(包類路徑)

(3)建立對象時候,預設也是執行無參數構造方法完成對象建立

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

3.2 注入屬性

DI:依賴注入,就是注入屬性

3.2.1 第一種注入方式:使用set方法進行注入

  • 1、建立類,在類中定義屬性和對應的set方法
  • 2、在 spring 配置檔案配置對象建立,配置屬性注入

友情提示:使用set方式進行屬性的注入、需要在類中、手動填寫​

​setXXX​

​。如果使用lombok生成的setXXX、似乎不可以

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

定義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>      

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

3.2.2 第二種注入方式:使用過有參構造函數進行注入

  • 1、建立類,定義屬性,建立屬性對應有參數構造方法
  • 2、在 spring 配置檔案中進行配置
Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

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>      

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

3.3 注入其他類型屬性

3.3.1 注入null值(字面量)

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

不寫value值、直接寫null

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

3.3.2 屬性值包含特殊符号

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

如果特殊字元不進行轉義、會報錯哦

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

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>      
Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

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>
      
Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

測試結果

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)

内部bean可以改為外部bean(外部bean叫容易維護)

Spring5入門到實戰------3、IOC容器-Bean管理XML方式(一)