Spring中的構(gòu)造注入
在上一篇文章中我們了解了DI的set注入,接下來我們來看一下DI實現(xiàn)的另一種方式,構(gòu)造注入。
構(gòu)造注入
構(gòu)造注入是指,在構(gòu)造調(diào)用者實例的同時,完成被調(diào)用者的實例化。
即,使用構(gòu)造器設(shè)置依賴關(guān)系。
簡單的理解就是spring調(diào)用類的有參構(gòu)造方法,在創(chuàng)建對象的同時使用構(gòu)造方法給屬性賦值。
看一下構(gòu)造注入的實現(xiàn)
首先定義School類和Student類,在Student類中創(chuàng)建School類的對象。
School類:
public class School {
private String name;
private String address;
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
Student類:
public class Student {
private String name;
private int age;
private School school;
public Student() {
System.out.println("Student的無參構(gòu)造方法");
}
public Student(String myName, int myAge, School mySchool){
System.out.println("Student的有參構(gòu)造方法");
this.name = myName;
this.age = myAge;
this.school = mySchool;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSchool(School school) {
this.school = school;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
接下來在spring的配置文件中聲明需要用到的對象
<!--
構(gòu)造注入使用<constructor-arg>標(biāo)簽
一個<constructor-arg>標(biāo)簽表示構(gòu)造方法的一個參數(shù)
<constructor-arg>標(biāo)簽屬性:
name:表示構(gòu)造方法的形參名
index:表示構(gòu)造方法中參數(shù)的位置,自左向右從0開始
value:構(gòu)造方法的形參類型是簡單類型,使用value
ref:構(gòu)造方法的形參類型是引用類型,使用ref
下面分別使用name和index來完成構(gòu)造注入
-->
<!--使用name屬性-->
<bean id="myStudent1" class="com.xxx.package01.Student">
<constructor-arg name="myName" value="張三" />
<constructor-arg name="myAge" value="20" />
<constructor-arg name="mySchool" ref="mySchool" />
</bean>
<!--使用index屬性-->
<bean id="myStudent2" class="com.xxx.package01.Student">
<constructor-arg index="0" value="張三" />
<constructor-arg index="1" value="20" />
<constructor-arg index="2" ref="mySchool" />
</bean>
<bean id="mySchool" class="com.xxx.package01.School">
<property name="name" value="北京大學(xué)" />
<property name="address" value="北京" />
</bean>準(zhǔn)備一個測試方法,測試以上程序
public class MyTest {
@Test
public void test01(){
String config = "package01/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//使用myStudent1或myStudent2對象都能完成注入
Student myStudent = (Student) ac.getBean("myStudent1");
//Student myStudent = (Student) ac.getBean("myStudent2");
System.out.println("Student = " + myStudent);
}
}測試結(jié)果如下:

從輸出結(jié)果我們可以看出,構(gòu)造注入在創(chuàng)建對象時調(diào)用的是Student的有參構(gòu)造方法,因為我們在spring配置文件中聲明了兩次Student對象,所以會調(diào)用兩次有參構(gòu)造方法。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名
這篇文章主要介紹了Java實現(xiàn)讀取文件夾下(包括子目錄)所有文件的文件名,本文把代碼組織成了一個模塊,可以很方便的使用,需要的朋友可以參考下2015-06-06
Spring Boot WebSocket 兩種集成方式詳解
WebSocket 是實現(xiàn)服務(wù)器主動推送、實時通信的利器,常見于聊天室、消息通知、實時監(jiān)控大屏等場景,本文詳細(xì)介紹了SpringBoot集成WebSocket的兩種方式,感興趣的朋友跟隨小編一起看看吧2026-05-05
Java Swing中的表格(JTable)和樹(JTree)組件使用實例
這篇文章主要介紹了Java Swing中的表格(JTable)和樹(JTree)組件使用實例,本文同時講解了表格和樹的基本概念、常用方法、代碼實例,需要的朋友可以參考下2014-10-10
Kotlin開發(fā)Android應(yīng)用實例詳解
這篇文章主要介紹了Kotlin開發(fā)Android應(yīng)用實例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
Java中實現(xiàn)文件預(yù)覽的功能(實例代碼)
大家都知道word,Excel,PPT實現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進(jìn)行預(yù)覽,下面給大家介紹Java中如何實現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下2023-05-05
淺析Spring boot 中 logback 配置<springPropert
這篇文章主要介紹了淺析Spring boot 中 logback 配置<springProperty> 讀取application.properties 中的屬性,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02

