JavaRush /Blog Java /Random-FR /Printemps. Leçon 4 : L'attribut value pour l'intégration ...
Umaralikhon
Niveau 3
Красноярск

Printemps. Leçon 4 : L'attribut value pour l'intégration de valeurs

Publié dans le groupe Random-FR
Et donc... Nous continuons notre cap sur le Printemps. Dans la dernière leçon, nous avons étudié l'injection de dépendances à l'aide d'un setter. Si vous l'avez remarqué, nous avons implémenté des valeurs en utilisant des liens vers l'identifiant. Autrement dit, l'implémentation a eu lieu à l'aide de l'attribut ref. Cela ressemblait à ceci : Liste 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
Ici, la 4ème ligne fait référence à l'identifiant "javaDeveloper", qui implémente la valeur de la classe JavaDevelopment. Que se passe-t-il si nous voulons injecter les valeurs manuellement ou les obtenir d'une autre manière, puis les injecter. Regardons un exemple. Chaque employé a une citoyenneté et un salaire. Et laissez ces entités être définies dans la classe HiringDepartment. Disons ceci : Listing 2
package org.example;

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

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }

    public void setDevelopment(Development development){
        this.development = development;
    }

    public Development getDevelopment(){
        return development;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public String getCitizenship() {
        return citizenship;
    }

    public void setCitizenship(String citizenship) {
        this.citizenship = citizenship;
    }
}
Ici, nous avons ajouté 2 champs. salaire int et citoyenneté String . Nous avons également défini des getters et des setters pour ces objets. Pour rappel, Spring fait référence à ces getters et setters en coulisses pour lier des valeurs aux objets de classe. Nous ne touchons pas encore aux autres classes. Et puis nous refaireons le fichier applicationContext, qui définit les beans pour nos objets. Et cela ressemble à ceci : 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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <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="javaDeveloper"/>
        <property name="citizenship" value="USA"/>
        <property name="salary" value="5000"/>
    </bean>

</beans>
Contrairement au listing 1, deux propriétés supplémentaires ont été ajoutées ici (lignes 12 et 13). C'est là qu'intervient l'attribut value , qui est défini à l'intérieur de la balise de propriété. Permettez-moi de vous rappeler encore une fois que la valeur de l'attribut name doit correspondre à l'objet auquel le bean fait référence. Et puis Spring détermine indépendamment les getters et les setters en utilisant ces valeurs. Et en utilisant l' attribut value , nous implémentons des valeurs pour les champs. Notez que les deux valeurs sont définies entre guillemets, bien que cela soit inhabituel pour le type int. Mais Spring, comme toujours, détermine quelle valeur doit être associée à quel type. Cela se produit à cause de l' attribut name . Par le nom du bean, Spring fait référence à un objet de la classe et détermine le type de cet objet. Eh bien voilà tout. Il ne reste plus qu'à vérifier nos mises à jour dans la classe Main : Listing 5
package org.example;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String ... args){
        //Определяем контекст файл в котором содержатся прописанные нами бины
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //Получем бины, которые были определены в файле applicationContext.xml
        HiringDepartment hiringDepartment = context.getBean("hiringDepartment", HiringDepartment.class);

        hiringDepartment.displayInfo();
        System.out.println("Citizenship: " + hiringDepartment.getCitizenship());
        System.out.println("Salary: " + hiringDepartment.getSalary());
        context.close(); //Контекст всегда должен закрываться
    }
}
Il n'est pas nécessaire de changer grand-chose ici. Uniquement pour obtenir des résultats, nous appelons les getters de la classe HiringDepartment en utilisant le flux de sortie standard. En conséquence, nous obtenons la réponse suivante :
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
D'ACCORD. Disons que nous avons 10 de ces employés qui ont la même nationalité et reçoivent le même salaire. Et disons que l’entreprise décide d’augmenter ses salaires. Ensuite, vous devrez modifier manuellement toutes ces 10 valeurs. C'est trop ennuyeux. Et si nous définissions ces valeurs dans un fichier séparé et associions ces valeurs à des beans ? Ensuite, nous n'aurions qu'à modifier la valeur une seule fois dans ce fichier, et les beans restants faisant référence à cette valeur changeraient automatiquement. Essayons... Pour ce faire, nous allons faire quelques mises à jour dans la structure du projet et dans le fichier applicationContext.xml. Tout d’abord, dans le dossier ressources, ajoutez un nouveau fichier avec l’extension .properties . J'ai nommé ce fichier "myApp.properties". Maintenant, la structure du projet a pris la forme suivante : Printemps.  Leçon 4. L'attribut value pour l'intégration des valeurs - 1 Et dans le fichier nous écrirons les valeurs suivantes :
employee.citizenship="Russia"
employee.salary=6000
À gauche du signe "=" se trouvent les noms des variables (si on peut les appeler ainsi), et à droite se trouvent les valeurs de ces variables. Vous pouvez donner le nom comme vous le souhaitez, mais comme d'habitude, avec un sens. Et oui, le point joue ici un rôle stratégique et non syntaxique. Disons que nous avons aussi des managers, avec eux aussi leurs propres salaires. Ensuite, nous pouvons simplement nommer ces variables comme ceci : manager.salary. Autrement dit, les noms des variables ne coïncideront pas et n'interféreront pas les uns avec les autres. Mettons maintenant à jour le fichier applicationContext.xml. Avant de déclarer des beans, vous devez écrire la ligne suivante :
<context:property-placeholder location="classpath:myApp.properties"/>
Ici, nous définissons le fichier que nous avons créé pour intégrer les valeurs. Et puis dans l'attribut value nous mettons le signe dollar $ entre guillemets doubles et entre accolades {} nous écrivons le nom de la variable du fichier myApp.properties :
<property name="salary" value="${employee.salary}"/>
En conséquence, Spring recherche cette variable, obtient sa valeur et l'attache à l'objet de classe. Le code complet ressemble à ceci : Listing 6
<?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">

    <context:property-placeholder location="classpath:myApp.properties"/>

    <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="javaDeveloper"/>
        <property name="citizenship" value="${employee.citizenship}"/>
        <property name="salary" value="${employee.salary}"/>
    </bean>

</beans>
Lançons le programme :
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Comme toujours, la meilleure façon d’apprendre la programmation est de programmer. Répétez vous-même ce que vous avez appris, essayez de mettre à jour les éléments, jouez avec le code. Bref, foncez. Et c'est tout pour moi. Merci pour votre attention! Code source sur le lien Mon GitHub Rejoindre ma chaîne télégramme Contenu du cours A suivre...
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION