JavaRush /Java Blog /Random-IT /Primavera. Lezione 3. DI usando il setter
Umaralikhon
Livello 3
Красноярск

Primavera. Lezione 3. DI usando il setter

Pubblicato nel gruppo Random-IT
E allora... Continuiamo il nostro percorso sulla Primavera. Nell'ultima lezione abbiamo imparato come iniettare dipendenze utilizzando un costruttore di classi. Ora è il momento di presentarti un altro metodo di iniezione delle dipendenze: utilizzando un setter . Per ripristinare la memoria delle lezioni precedenti, ti mostrerò la struttura del nostro programma. Primavera.  Lezione 3. DI usando il setter - 1 Siamo interessati solo ai file HiringDepartment e applicationContext. Gestiscono il nostro progetto. Li rifaremo. Questo è il vecchio codice per il file HiringDepartment: (Listato 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());
    }
}
Come vediamo qui, un costruttore viene utilizzato per inizializzare un oggetto di tipo Development. Rimuoviamo questo costruttore (o lo lasciamo, non fa differenza). E scriviamo un setter, come nell'esempio seguente: (Listato 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());
    }
}
Ora apriamo il file applicationContext.xml nella cartella risorse. Sembra questo: (Listato 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>
Come ricordiamo (o non ricordiamo), nella riga <constructor-arg ref="javaDeveloper"/> la dipendenza viene iniettata utilizzando il costruttore. Ora dobbiamo riscrivere questa riga per il setter come mostrato di seguito:
<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>
Cosa sta succedendo esattamente qui? La riga <property name="development" ref="pythonDeveloper"/> utilizza la parola chiave " property " per iniettare la dipendenza utilizzando un setter. In che modo Spring ha scoperto a quale setter è necessario associare l' oggetto pythonDeveloper nel nostro esempio ? Notare il valore risultante property="..." . È scritto come "sviluppo" . E il nostro setter nel file HiringDepartment si chiama setDevelopment . Spring converte il valore dello sviluppo in setDevelopment dietro le quinte . Cioè, la prima lettera diventa maiuscola e il prefisso set (developmet -> setDevelopment) viene posto all'inizio della parola. Primavera.  Lezione 3. DI usando il setter - 2Cosa c'è sotto il cofano? Cosa vediamo: vengono creati due bean con id javaDeveloper e pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Cosa succede realmente: Spring crea due oggetti di tipo JavaDevelopment e PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Ed ecco cosa vediamo: viene creato un bean con id hiringDepartment. Quindi l'id di uno dei nostri oggetti sopra creati viene assegnato alla proprietà:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Cosa succede realmente: viene creato un oggetto di tipo HiringDepartment. Quindi viene chiamato il metodo set di questa classe setDevelopment(Sviluppo dello sviluppo). E il valore ref (id degli oggetti creati) viene passato come argomento:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Avvia l'applicazione:
Name: Mike
Job: Middle Python developer
Questo è tutto quello che ho. Grazie per l'attenzione! Codice sorgente al link Il mio carrello GitHub Contenuto del corso Continua...
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION