JavaRush /Java-Blog /Random-DE /Frühling. Lektion 3. DI mit Setter
Umaralikhon
Level 3
Красноярск

Frühling. Lektion 3. DI mit Setter

Veröffentlicht in der Gruppe Random-DE
Und so... Wir setzen unseren Frühlingskurs fort. In der letzten Lektion haben wir gelernt, wie man mithilfe eines Klassenkonstruktors Abhängigkeiten einfügt. Jetzt ist es an der Zeit, Ihnen eine andere Methode der Abhängigkeitsinjektion vorzustellen – die Verwendung eines Setters . Um die Erinnerung an frühere Lektionen wiederherzustellen, zeige ich Ihnen den Aufbau unseres Programms. Frühling.  Lektion 3. DI mit Setter – 1 Uns interessieren nur die HiringDepartment- und applicationContext-Dateien. Sie leiten unser Projekt. Wir werden sie wiederholen. Dies ist der alte Code für die HiringDepartment-Datei: (Listing 1)
package org.example;

public class HiringDepartment {
    private Development development; //Определяем интерфейс

    //Конструктор принимает ein Objekt интерфейса
    public HiringDepartment(Development development){
        this.development = development;
    }

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }
}
Wie wir hier sehen, wird ein Konstruktor verwendet, um ein Objekt vom Typ Development zu initialisieren. Wir entfernen diesen Konstruktor (oder belassen ihn, es macht keinen Unterschied). Und schreiben wir einen Setter, wie im folgenden Beispiel: (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());
    }
}
Öffnen wir nun die Datei applicationContext.xml im Ressourcenordner. Es sieht so aus: (Listing 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>
Wie wir uns erinnern (oder nicht erinnern), wird in der Zeile <constructor-arg ref="javaDeveloper"/> die Abhängigkeit mithilfe des Konstruktors eingefügt. Jetzt müssen wir diese Zeile für den Setter wie folgt umschreiben:
<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>
Was genau ist hier los? Die Zeile <property name="development" ref="pythonDeveloper"/> verwendet das Schlüsselwort „ property “, um die Abhängigkeit mithilfe eines Setters einzufügen. Wie hat Spring herausgefunden, mit welchem ​​Setter das PythonDeveloper- Objekt in unserem Beispiel verknüpft werden muss ? Beachten Sie den resultierenden property="..." -Wert . Es wird als „Entwicklung“ geschrieben . Und unser Setter in der HiringDepartment-Datei heißt setDevelopment . Spring wandelt den Wert von development hinter den Kulissen in setDevelopment um . Das heißt, der erste Buchstabe wird großgeschrieben und das Präfix set (developmet -> setDevelopment) wird am Anfang des Wortes platziert. Frühling.  Lektion 3. DI mit Setter – 2Was steckt unter der Haube? Was wir sehen: Es werden zwei Beans mit den IDs javaDeveloper und pythonDeveloper erstellt:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Was tatsächlich passiert: Spring erstellt zwei Objekte vom Typ JavaDevelopment und PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Und hier ist, was wir sehen: Eine Bean mit der ID HiringDepartment wird erstellt. Dann wird der Eigenschaft die ID eines unserer oben erstellten Objekte zugewiesen:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Was tatsächlich passiert: Ein Objekt vom Typ HiringDepartment wird erstellt. Dann wird die Set-Methode dieser Klasse setDevelopment(Development development) aufgerufen. Und der Ref-Wert (ID der erstellten Objekte) wird als Argument übergeben:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Anwendung starten:
Name: Mike
Job: Middle Python developer
Das ist alles was ich habe. Danke für die Aufmerksamkeit! Quellcode unter dem Link Mein GitHub- Warenkorb Kursinhalt Fortsetzung folgt...
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION