JavaRush /Java Blog /Random-ID /Musim semi. Pelajaran 3. DI menggunakan setter
Umaralikhon
Level 3
Красноярск

Musim semi. Pelajaran 3. DI menggunakan setter

Dipublikasikan di grup Random-ID
Jadi... Kami melanjutkan kursus kami di Musim Semi. Pada pelajaran terakhir kita mempelajari cara menginjeksi dependensi menggunakan konstruktor kelas. Sekarang saatnya memperkenalkan Anda pada metode injeksi ketergantungan lainnya - menggunakan setter . Untuk mengembalikan ingatan akan pelajaran sebelumnya, saya akan menunjukkan kepada Anda struktur program kami. Musim semi.  Pelajaran 3. DI menggunakan setter - 1 Kami hanya tertarik pada file HiringDepartment dan applicationContext. Mereka mengelola proyek kami. Kami akan mengulanginya. Ini adalah kode lama untuk file HiringDepartment: (Listing 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());
    }
}
Seperti yang kita lihat di sini, konstruktor digunakan untuk menginisialisasi objek bertipe Development. Kami menghapus konstruktor ini (atau membiarkannya, tidak ada bedanya). Dan mari kita tulis setternya, seperti pada contoh berikut: (Listing 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());
    }
}
Sekarang mari kita buka file applicationContext.xml di folder sumber daya. Tampilannya seperti ini: (Daftar 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>
Seperti yang kita ingat (atau tidak ingat), pada baris <constructor-arg ref="javaDeveloper"/> ketergantungan disuntikkan menggunakan konstruktor. Sekarang kita perlu menulis ulang baris ini untuk penyetel seperti yang ditunjukkan di bawah ini:
<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>
Apa sebenarnya yang terjadi di sini? Baris <property name="development" ref="pythonDeveloper"/> menggunakan kata kunci " property " untuk memasukkan ketergantungan menggunakan penyetel. Bagaimana Spring mengetahui penyetel mana yang perlu dikaitkan dengan objek pythonDeveloper dalam contoh kita ? Perhatikan property="..." value yang dihasilkan . Itu ditulis sebagai "pembangunan" . Dan penyetel kita di file HiringDepartment disebut setDevelopment . Spring mengubah nilai development menjadi setDevelopment di belakang layar . Artinya, huruf pertama menjadi kapital dan awalan set (developmet -> setDevelopment) ditempatkan di awal kata. Musim semi.  Pelajaran 3. DI menggunakan setter - 2Apa yang ada di balik terpal? Apa yang kita lihat: Dua kacang dibuat dengan id javaDeveloper dan pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Apa yang sebenarnya terjadi: Spring membuat dua objek bertipe JavaDevelopment dan PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Dan inilah yang kita lihat: Kacang dengan id HiringDepartment telah dibuat. Kemudian id dari salah satu objek yang kita buat di atas ditugaskan ke properti:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Apa yang sebenarnya terjadi: Sebuah objek bertipe HiringDepartment dibuat. Kemudian metode set kelas ini setDevelopment(Pengembangan pengembangan) dipanggil. Dan nilai ref (id dari objek yang dibuat) dilewatkan sebagai argumen:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Luncurkan aplikasi:
Name: Mike
Job: Middle Python developer
Hanya itu yang saya punya. Terima kasih atas perhatian Anda! Kode sumber di tautan Konten Kursus Kereta GitHub Saya Bersambung...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION