JavaRush /จาวาบล็อก /Random-TH /ฤดูใบไม้ผลิ. บทที่ 3. DI โดยใช้ setter
Umaralikhon
ระดับ
Красноярск

ฤดูใบไม้ผลิ. บทที่ 3. DI โดยใช้ setter

เผยแพร่ในกลุ่ม
ดังนั้น... เราจึงเดินทางต่อในฤดูใบไม้ผลิ ใน บทเรียน ที่แล้วเราได้เรียนรู้วิธีการฉีดการพึ่งพาโดยใช้ตัวสร้างคลาส ตอนนี้ได้เวลาแนะนำให้คุณรู้จักกับวิธีอื่นในการฉีดการพึ่งพาโดยใช้setter เพื่อฟื้นความทรงจำของบทเรียนก่อนหน้า ฉันจะแสดงโครงสร้างของโปรแกรมให้คุณดู ฤดูใบไม้ผลิ.  บทที่ 3. DI ใช้ setter - 1 เราสนใจเฉพาะไฟล์ 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) จะถูกวางไว้ที่จุดเริ่มต้นของคำ ฤดูใบไม้ผลิ.  บทที่ 3. DI ใช้ setter - 2อะไรอยู่ภายใต้ประทุน? สิ่งที่เราเห็น: มีการสร้างถั่วสองอันด้วย 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 มีต่อ...
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION