ดังนั้น... เราจึงเดินทางต่อในฤดูใบไม้ผลิ ใน บทเรียน ที่แล้วเราได้เรียนรู้วิธีการฉีดการพึ่งพาโดยใช้ตัวสร้างคลาส ตอนนี้ได้เวลาแนะนำให้คุณรู้จักกับวิธีอื่นในการฉีดการพึ่งพาโดยใช้setter เพื่อฟื้นความทรงจำของบทเรียนก่อนหน้า ฉันจะแสดงโครงสร้างของโปรแกรมให้คุณดู เราสนใจเฉพาะไฟล์ HiringDepartment และ applicationContext เท่านั้น พวกเขาจัดการโครงการของเรา เราจะทำซ้ำ นี่คือรหัสเก่าสำหรับไฟล์ HiringDepartment: (รายการ 1)
package org.example;
public class HiringDepartment {
private Development development; //Определяем интерфейс
//Конструктор принимает an object интерфейса
public HiringDepartment(Development development){
this.development = development;
}
public void displayInfo(){
System.out.println("Name: " + development.getName());
System.out.println("Job: " + development.getJob());
}
}
ดังที่เราเห็นในที่นี้ Constructor ถูกใช้เพื่อเริ่มต้นอ็อบเจ็กต์ประเภท Development เราลบตัวสร้างนี้ออก (หรือปล่อยไว้ ก็ไม่สร้างความแตกต่าง) และลองเขียน setter ดังตัวอย่างต่อไปนี้: (รายการ 2)
package org.example;
public class HiringDepartment {
private Development development; //Определяем интерфейс
//Вместо конструктора используем сеттер
public void setDevelopment(Development development){
this.development = development;
}
public void displayInfo(){
System.out.println("Name: " + development.getName());
System.out.println("Job: " + development.getJob());
}
}
ตอนนี้เรามาเปิดไฟล์ applicationContext.xml ในโฟลเดอร์ทรัพยากรกันดีกว่า มีลักษณะดังนี้: (รายการ 3)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
<bean id="hiringDepartment" class="org.example.HiringDepartment">
<constructor-arg ref="javaDeveloper"/>
</bean>
</beans>
ตามที่เราจำได้ (หรือจำไม่ได้) ในบรรทัด <constructor-arg ref="javaDeveloper"/> การขึ้นต่อกันจะถูกฉีดเข้าไปโดยใช้ Constructor ตอนนี้เราต้องเขียนบรรทัดนี้ใหม่สำหรับ setter ดังที่แสดงด้านล่าง:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
<bean id="hiringDepartment" class="org.example.HiringDepartment">
<property name="development" ref="pythonDeveloper"/> <!--Изменяем только тут-->
</bean>
เกิดอะไรขึ้นที่นี่กันแน่? บรรทัด <property name="development" ref="pythonDeveloper"/>ใช้คีย์เวิร์ด " property " เพื่อแทรกการพึ่งพาโดยใช้ setter Spring รู้ได้อย่างไรว่า setter ตัวใดที่วัตถุpythonDeveloper จำเป็นต้องเชื่อมโยงกับตัวอย่างของเรา หมายเหตุคุณสมบัติผลลัพธ์= "..."ค่า เขียนไว้ว่า" การพัฒนา" และ ผู้ตั้งค่าของเราในไฟล์ HiringDepartment เรียกว่าsetDevelopment Spring แปลงคุณค่าของการพัฒนาเป็นsetDevelopment เบื้องหลัง นั่นคือตัวอักษรตัวแรกจะกลายเป็นตัวพิมพ์ใหญ่และชุดคำนำหน้า (developmet -> setDevelopment) จะถูกวางไว้ที่จุดเริ่มต้นของคำ อะไรอยู่ภายใต้ประทุน? สิ่งที่เราเห็น: มีการสร้างถั่วสองอันด้วย id javaDeveloper และ pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
สิ่งที่เกิดขึ้นจริง: Spring สร้างอ็อบเจ็กต์สองประเภท JavaDevelopment และ PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
และนี่คือสิ่งที่เราเห็น: bean ที่มีรหัสการจ้างงานแผนกถูกสร้างขึ้น จากนั้นรหัสของหนึ่งในวัตถุที่สร้างขึ้นข้างต้นของเราจะถูกกำหนดให้กับคุณสมบัติ:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
<property name="development" ref="pythonDeveloper"/>
</bean>
สิ่งที่เกิดขึ้นจริง: มีการสร้างออบเจ็กต์ประเภท HiringDepartment จากนั้นจะเรียกเมธอด set ของคลาส setDevelopment (การพัฒนาการพัฒนา) และค่าอ้างอิง (id ของวัตถุที่สร้างขึ้น) ถูกส่งผ่านเป็นอาร์กิวเมนต์:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
เปิดแอปพลิเคชัน:
Name: Mike
Job: Middle Python developer
นั่นคือทั้งหมดที่ฉันมี ขอบคุณสำหรับความสนใจ! ซอร์สโค้ดที่ลิงก์เนื้อหาหลักสูตร My GitHub Cart มีต่อ...
GO TO FULL VERSION