JavaRush /Blog Java /Random-PL /Wiosna. Lekcja 3. DI przy użyciu settera
Umaralikhon
Poziom 3
Красноярск

Wiosna. Lekcja 3. DI przy użyciu settera

Opublikowano w grupie Random-PL
I tak... Kontynuujemy nasz kurs na wiosnę. Na ostatniej lekcji nauczyliśmy się wstrzykiwać zależności za pomocą konstruktora klasy. Teraz czas przedstawić Ci inną metodę wstrzykiwania zależności - użycie settera . Aby przywrócić pamięć poprzednich lekcji, pokażę Ci strukturę naszego programu. Wiosna.  Lekcja 3. DI z użyciem settera - 1 Interesują nas tylko pliki HiringDepartment i applicationContext. Zarządzają naszym projektem. Zrobimy je ponownie. To jest stary kod pliku HiringDepartment: (Listing 1)
package org.example;

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

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

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }
}
Jak widać, konstruktor służy do inicjowania obiektu typu Development. Usuwamy tego konstruktora (lub zostawiamy, nie ma to znaczenia). I napiszmy settera, jak w poniższym przykładzie: (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());
    }
}
Otwórzmy teraz plik applicationContext.xml w folderze Resources. Wygląda to tak: (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>
Jak pamiętamy (lub nie pamiętamy), w linii <constructor-arg ref="javaDeveloper"/> zależność jest wstrzykiwana za pomocą konstruktora. Teraz musimy przepisać tę linię dla settera, jak pokazano poniżej:
<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>
Co dokładnie się tutaj dzieje? Linia <property name="development" ref="pythonDeveloper"/> używa słowa kluczowego " property " do wstrzyknięcia zależności za pomocą metody ustawiającej. W jaki sposób Spring dowiedział się, z którym ustawieniem należy powiązać obiekt PythonDeveloper w naszym przykładzie ? Zanotuj wynikową wartość property="..." . Jest napisane jako „rozwój” . A nasz program ustawiający w pliku HiringDepartment nazywa się setDevelopment . Wiosna przekształca wartość rozwoju w rozwój za kulisami . Oznacza to, że pierwsza litera jest wielka, a zestaw przedrostków (developmet -> setDevelopment) jest umieszczany na początku słowa. Wiosna.  Lekcja 3. DI przy użyciu setera - 2Co kryje się pod maską? Co widzimy: Tworzone są dwa komponenty bean o identyfikatorach javaDeveloper i pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Co się właściwie dzieje: Spring tworzy dwa obiekty typu JavaDevelopment i PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
A oto co widzimy: Tworzony jest komponent bean o identyfikatorze HiringDepartment. Następnie do właściwości przypisywany jest identyfikator jednego z utworzonych przez nas obiektów:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Co się właściwie dzieje: Tworzony jest obiekt typu HiringDepartment. Następnie wywoływana jest metoda set tej klasy setDevelopment(Rozwój programistyczny). Wartość ref (identyfikator utworzonych obiektów) jest przekazywana jako argument:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Uruchom aplikację:
Name: Mike
Job: Middle Python developer
To wszystko co mam. Dziękuję za uwagę! Kod źródłowy pod linkiem Mój koszyk GitHub Treść kursu Ciąg dalszy...
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION