1. 程式人生 > 其它 >Spring注入屬性中的外部bean、內部bean和級聯賦值(超詳細)

Spring注入屬性中的外部bean、內部bean和級聯賦值(超詳細)

技術標籤:Spring5springbean

目錄

外部bean

(1)建立兩個類service類和dao類。
(2)在service呼叫dao裡面的方法。
(3)在spring配置檔案中進行配置。

UserDao介面:

package com.Keafmd.spring5.dao;

/**
 * Keafmd
 *
 * @ClassName: UserDao
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:30
 */

public interface
UserDao { public void updat(); }

UserDaoImpl類:

package com.Keafmd.spring5.dao;

/**
 * Keafmd
 *
 * @ClassName: UserDaoImpl
 * @Description: 實現類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:31
 */
public class UserDaoImpl implements UserDao{
    @Override
    public void updat() {
        System.out.
println("dao updat....."); } }

UserService 類:

package com.Keafmd.spring5.service;
import com.Keafmd.spring5.dao.UserDao;
import com.Keafmd.spring5.dao.UserDaoImpl;

/**
 * Keafmd
 *
 * @ClassName: UserService
 * @Description:
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:29
 */
public class UserService
{ //建立UserDao型別屬性,生成set方法 private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(){ System.out.println("service add....."); //1、原始方式 //建立UserDao物件 /* UserDao userDao = new UserDaoImpl(); userDao.updat();*/ //呼叫dao中的updat方法 userDao.updat(); } }

bean2.xml:

<?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-->
    <!--1 service 和 dao的物件建立-->
    <bean id="userService" class="com.Keafmd.spring5.service.UserService">
        <!--注入userDao物件
            name屬性:類裡面的屬性名稱
            ref屬性:建立UserDao物件bean標籤id值
        -->
        <property name="userDao" ref="userDaoImpl"></property>
    </bean>

    <bean id="userDaoImpl" class="com.Keafmd.spring5.dao.UserDaoImpl"></bean>


</beans>

測試類:

package com.Keafmd.spring5.testdemo;

import com.Keafmd.spring5.User;
import com.Keafmd.spring5.bean.Emp;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Keafmd
 *
 * @ClassName: TestBean
 * @Description: 注入屬性,外部bean
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:46
 */
public class TestBean {

    @Test
    public void testBean1(){
        //1、載Spring的配置檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean2.xml");

        //2、獲取配置檔案中建立的物件  預設是執行無參的構造方法建立
        UserService userservice =applicationContext.getBean("userService", UserService.class);

        //System.out.println(userservice);
        userservice.add();

    }


}

輸出結果:

service add.....
dao updat.....

Process finished with exit code 0

輸出了service的add和dao的update證明呼叫成功,這就是外部bean。

內部bean

(1)一對多的關係:部門和員工。
(1-1)一個部門有多個員工,一個員工屬於一個部門。
(1-2)部門是一,員工是多。
(2)在實體類之間表示一對多的關係,員工表示所屬部門,使用物件型別屬性進行表示。

Dept類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Dept
 * @Description: 部門類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Dept {

    private String dname;

    public void setDname(String dname) {
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

Emp類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Emp
 * @Description: 員工類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Emp {

    private String ename;
    private String gender;

    //表示員工屬於某一個部門,使用物件的形式表示
    private Dept 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 void add(){
        System.out.println(ename+" "+gender+" "+dept);
    }
}

bean3.xml

<?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-->
    <bean id="emp" class="com.Keafmd.spring5.bean.Emp">
        <!--先設定兩個普通的屬性-->
        <property name="ename" value="小明"></property>
        <property name="gender" value=""></property>

        <!--物件型別的屬性-->
        <property name="dept">
            <bean id="dept" class="com.Keafmd.spring5.bean.Dept">
                <property name="dname" value="安保部"></property>
            </bean>
        </property>

    </bean>


</beans>

測試類:

package com.Keafmd.spring5.testdemo;

import com.Keafmd.spring5.User;
import com.Keafmd.spring5.bean.Emp;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Keafmd
 *
 * @ClassName: TestBean
 * @Description: 注入屬性,內部bean
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:46
 */
public class TestBean {

    @Test
    public void testBean2(){
        //1、載Spring的配置檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean3.xml");

        //2、獲取配置檔案中建立的物件  預設是執行無參的構造方法建立
        Emp emp =applicationContext.getBean("emp", Emp.class);

		//System.out.println(userservice);
        emp.add();

    }


}

輸出結果:

小明 男 Dept{dname='安保部'}

Process finished with exit code 0

這次的我們是把部門bean寫到員工bean裡的,這就是內部bean。

級聯賦值

第一種寫法

Dept類和Emp類都不變。寫個新的配置檔案bean4.xml,改變配置檔案的內容。

Dept類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Dept
 * @Description: 部門類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Dept {

    private String dname;

    public void setDname(String dname) {
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

Emp類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Emp
 * @Description: 員工類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Emp {

    private String ename;
    private String gender;

    //表示員工屬於某一個部門,使用物件的形式表示
    private Dept 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 void add(){
        System.out.println(ename+" "+gender+" "+dept);
    }
}

bean4.xml:

<?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="emp" class="com.Keafmd.spring5.bean.Emp">
        <!--先設定兩個普通的屬性-->
        <property name="ename" value="小紅"></property>
        <property name="gender" value=""></property>

        <!--級聯賦值-->
        <property name="dept" ref ="dept"></property>

    </bean>


    <bean id="dept" class="com.Keafmd.spring5.bean.Dept">
        <property name="dname" value="財務部"></property>
    </bean>

</beans>

測試類只改變了配置檔案。
測試類:

package com.Keafmd.spring5.testdemo;

import com.Keafmd.spring5.User;
import com.Keafmd.spring5.bean.Emp;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Keafmd
 *
 * @ClassName: TestBean
 * @Description: 注入屬性,內部bean
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:46
 */
public class TestBean {

    //級聯賦值第一種方法測試
    @Test
    public void testBean3(){
        //1、載Spring的配置檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean4.xml");

        //2、獲取配置檔案中建立的物件  預設是執行無參的構造方法建立
        Emp emp =applicationContext.getBean("emp", Emp.class);

		//System.out.println(userservice);
        emp.add();

    }

}

輸出結果:

小紅 女 Dept{dname='財務部'}

Process finished with exit code 0

第二種寫法

Dept類不變,Emp類多加個生成dept的get方法,改變配置檔案的內容,在配置檔案中加上<property name="dept.dname" value="技術部"></property>語句。

Dept類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Dept
 * @Description: 部門類
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Dept {

    private String dname;

    public void setDname(String dname) {
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

Emp類:

package com.Keafmd.spring5.bean;

/**
 * Keafmd
 *
 * @ClassName: Emp
 * @Description: 員工類 級聯賦值的第二種寫法
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:53
 */
public class Emp {

    private String ename;
    private String gender;

    //表示員工屬於某一個部門,使用物件的形式表示
    private Dept dept;


     // 級聯賦值的第二種辦法加的語句,生成dept的get方法
    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 void add(){
        System.out.println(ename+" "+gender+" "+dept);
    }
}

bean4.xml:

<?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="emp" class="com.Keafmd.spring5.bean.Emp">
        <!--先設定兩個普通的屬性-->
        <property name="ename" value="小紅"></property>
        <property name="gender" value=""></property>

        <!--級聯賦值-->
        <property name="dept" ref ="dept"></property>



        <!--級聯賦值第二種辦法的語句,需要get方法-->
        <property name="dept.dname" value="技術部"></property>


    </bean>


    <bean id="dept" class="com.Keafmd.spring5.bean.Dept">
		<!--<property name="dname" value="財務部"></property>-->
    </bean>

</beans>

測試類只改變了配置檔案。
測試類:

package com.Keafmd.spring5.testdemo;

import com.Keafmd.spring5.User;
import com.Keafmd.spring5.bean.Emp;
import com.Keafmd.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Keafmd
 *
 * @ClassName: TestBean
 * @Description: 注入屬性,內部bean
 * @author: 牛哄哄的柯南
 * @date: 2021-01-15 9:46
 */
public class TestBean {

    //級聯賦值第二種方法測試
    @Test
    public void testBean3(){
        //1、載Spring的配置檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean4.xml");

        //2、獲取配置檔案中建立的物件  預設是執行無參的構造方法建立
        Emp emp =applicationContext.getBean("emp", Emp.class);

		//System.out.println(userservice);
        emp.add();

    }

}

輸出結果:

小紅 女 Dept{dname='技術部'}

Process finished with exit code 0

用級聯賦值的第二種寫法,小紅的部門變為了技術部。

看完如果對你有幫助,感謝點贊支援!
如果你是電腦端的話,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

在這裡插入圖片描述

加油!

共同努力!

Keafmd