JavaRush /Blog Java /Random-MS /Musim bunga. Pelajaran 3. DI menggunakan setter
Umaralikhon
Tahap
Красноярск

Musim bunga. Pelajaran 3. DI menggunakan setter

Diterbitkan dalam kumpulan
Dan seterusnya... Kami meneruskan kursus kami pada Spring. Dalam pelajaran lepas kita belajar cara menyuntik kebergantungan menggunakan pembina kelas. Kini tiba masanya untuk memperkenalkan anda kepada kaedah suntikan pergantungan yang lain - menggunakan setter . Untuk memulihkan ingatan pelajaran terdahulu, saya akan menunjukkan kepada anda struktur program kami. Musim bunga.  Pelajaran 3. DI menggunakan setter - 1 Kami hanya berminat dengan fail HiringDepartment dan applicationContext. Mereka menguruskan projek kami. Kami akan membuat semula mereka. Ini ialah kod lama untuk fail HiringDepartment: (Penyenaraian 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, pembina digunakan untuk memulakan objek jenis Pembangunan. Kami mengalih keluar pembina ini (atau meninggalkannya, tidak ada bezanya). Dan mari tulis setter, seperti dalam contoh berikut: (Penyenaraian 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 buka fail applicationContext.xml dalam folder sumber. Ia kelihatan seperti ini: (Penyenaraian 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), dalam baris <constructor-arg ref="javaDeveloper"/> kebergantungan disuntik menggunakan pembina. Sekarang kita perlu menulis semula baris ini untuk penetap seperti yang ditunjukkan di bawah:
<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 berlaku di sini? Baris <property name="development" ref="pythonDeveloper"/> menggunakan kata kunci " property " untuk menyuntik kebergantungan menggunakan penetap. Bagaimanakah Spring mengetahui penetap mana objek pythonDeveloper perlu dikaitkan dengan dalam contoh kami ? Perhatikan nilai harta="..." yang terhasil . Ia ditulis sebagai "pembangunan" . Dan setter kami dalam fail HiringDepartment dipanggil setDevelopment . Spring menukar nilai pembangunan kepada setDevelopment behind the scenes . Iaitu, huruf pertama menjadi huruf besar dan set awalan (developmet -> setDevelopment) diletakkan pada permulaan perkataan. Musim bunga.  Pelajaran 3. DI menggunakan setter - 2Apa yang ada di bawah tudung? Apa yang kita lihat: Dua kacang dicipta dengan id javaDeveloper dan pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Apa yang sebenarnya berlaku: Spring mencipta dua objek jenis JavaDevelopment dan PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Dan inilah yang kita lihat: Kacang dengan id hiringDepartment dicipta. Kemudian id salah satu objek yang kami buat di atas diberikan kepada harta:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Perkara yang sebenarnya berlaku: Objek jenis HiringDepartment dicipta. Kemudian kaedah set kelas setDevelopment(Development development) ini dipanggil. Dan nilai ref (id objek yang dibuat) diluluskan sebagai hujah:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Lancarkan aplikasi:
Name: Mike
Job: Middle Python developer
Itu sahaja yang saya ada. Terima kasih atas perhatian! Kod sumber pada pautan Kandungan Kursus Troli GitHub Saya Akan diteruskan...
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION