JavaRush /Blog Java /Random-FR /Printemps. Leçon 3. DI utilisant setter
Umaralikhon
Niveau 3
Красноярск

Printemps. Leçon 3. DI utilisant setter

Publié dans le groupe Random-FR
Et donc... Nous continuons notre cap sur le Printemps. Dans la dernière leçon, nous avons appris à injecter des dépendances à l'aide d'un constructeur de classe. Il est maintenant temps de vous présenter une autre méthode d'injection de dépendances : à l'aide d'un setter . Pour restaurer la mémoire des leçons précédentes, je vais vous montrer la structure de notre programme. Printemps.  Leçon 3. DI utilisant setter - 1 Nous ne nous intéressons qu'aux fichiers HiringDepartment et applicationContext. Ils gèrent notre projet. Nous allons les refaire. Il s'agit de l'ancien code du fichier 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());
    }
}
Comme nous le voyons ici, un constructeur permet d'initialiser un objet de type Development. Nous supprimons ce constructeur (ou le laissons, cela ne fait aucune différence). Et écrivons un setter, comme dans l'exemple suivant : (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());
    }
}
Ouvrons maintenant le fichier applicationContext.xml dans le dossier ressources. Cela ressemble à ceci : (Liste 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>
Comme on s'en souvient (ou plus), dans la ligne <constructor-arg ref="javaDeveloper"/> la dépendance est injectée à l'aide du constructeur. Nous devons maintenant réécrire cette ligne pour le passeur comme indiqué ci-dessous :
<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>
Que se passe-t-il exactement ici ? La ligne <property name="development" ref="pythonDeveloper"/> utilise le mot-clé " property " pour injecter la dépendance à l'aide d'un setter. Comment Spring a-t-il découvert à quel setter l' objet pythonDeveloper doit être associé dans notre exemple ? Notez la valeur property="..." résultante . Cela s’écrit « développement » . Et notre setter dans le fichier HiringDepartment s'appelle setDevelopment . Spring convertit la valeur de development en setDevelopment en coulisses . Autrement dit, la première lettre devient en majuscule et le préfixe set (developmet -> setDevelopment) est placé au début du mot. Printemps.  Leçon 3. DI utilisant setter - 2Qu'y a-t-il sous le capot ? Ce que nous voyons : Deux beans sont créés avec les identifiants javaDeveloper et pythonDeveloper :
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Ce qui se passe réellement : Spring crée deux objets de type JavaDevelopment et PythonDevelopment :
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Et voici ce que nous voyons : Un bean avec l'identifiant HiringDepartment est créé. Ensuite, l'identifiant de l'un de nos objets créés ci-dessus est attribué à la propriété :
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Ce qui se passe réellement : Un objet de type HiringDepartment est créé. Ensuite, la méthode set de cette classe setDevelopment(Development development) est appelée. Et la valeur ref (id des objets créés) est passée en argument :
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Lancez l'application :
Name: Mike
Job: Middle Python developer
C'est tout ce que j'ai. Merci de votre attention! Code source sur le lien Mon panier GitHub Contenu du cours À suivre...
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION