Spring注入屬性中的外部bean、內部bean和級聯賦值(超詳細)
阿新 • • 發佈:2021-01-20
目錄
外部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