JavaRush /Java Blog /Random-IT /Primavera. Lezione 4: L'attributo value per incorporare v...
Umaralikhon
Livello 3
Красноярск

Primavera. Lezione 4: L'attributo value per incorporare valori

Pubblicato nel gruppo Random-IT
E allora... Continuiamo il nostro percorso sulla Primavera. Nell'ultima lezione abbiamo studiato l'iniezione delle dipendenze utilizzando un setter. Se hai notato, abbiamo implementato i valori utilizzando i collegamenti a id. Cioè, l'implementazione è avvenuta utilizzando l'attributo ref. Sembrava qualcosa del genere: Listato 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
Qui la riga 4 si riferisce all'id "javaDeveloper", che implementa il valore della classe JavaDevelopment. Cosa succede se vogliamo iniettare i valori manualmente o ottenerli in qualche altro modo e poi iniettarli. Diamo un'occhiata a un esempio. Ogni dipendente ha una cittadinanza e uno stipendio. E lasciamo che queste entità siano definite nella classe HiringDepartment. Diciamo questo: Listato 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;
    }
}
Qui abbiamo aggiunto 2 campi. int stipendio e cittadinanza String . Abbiamo anche definito getter e setter per questi oggetti. Come promemoria, Spring fa riferimento a questi getter e setter dietro le quinte per associare i valori agli oggetti della classe. Non toccheremo ancora le altre classi. E poi rifaremo il file applicationContext, che definisce i bean per i nostri oggetti. E assomiglia a 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"
        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>
A differenza del Listato 1, qui sono state aggiunte altre due proprietà (righe 12 e 13). È qui che entra in gioco l'attributo value , che è definito all'interno del tag property. Permettimi di ricordarti ancora una volta che il valore dell'attributo name deve corrispondere all'oggetto a cui si riferisce il bean. E poi Spring determina in modo indipendente getter e setter utilizzando questi valori. E utilizzando l' attributo value implementiamo i valori per i campi. Tieni presente che entrambi i valori sono definiti tra virgolette, sebbene ciò sia insolito per il tipo int. Ma Spring, come sempre, determina quale valore deve essere associato a quale tipo. Ciò accade a causa dell'attributo name . Con il nome del bean, Spring si riferisce a un oggetto della classe e determina il tipo di questo oggetto. Bene, questo è tutto. Ora non resta che controllare i nostri aggiornamenti nella 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(); //Контекст всегда должен закрываться
    }
}
Non c'è bisogno di cambiare molto qui. Solo per ottenere risultati chiamiamo getter della classe HiringDepartment utilizzando il flusso di output standard. Di conseguenza, otteniamo la seguente risposta:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
OK. Supponiamo di avere 10 dipendenti di questo tipo che hanno la stessa cittadinanza e ricevono lo stesso stipendio. E diciamo che l’azienda ha deciso di aumentare i propri stipendi. Quindi dovrai modificare manualmente tutti questi 10 valori. È troppo noioso. Cosa succede se definiamo questi valori in un file separato e associamo questi valori ai bean? Quindi dovremmo modificare il valore solo una volta in questo file e i rimanenti bean che fanno riferimento a questo valore cambieranno automaticamente. Proviamolo... Per fare questo, apporteremo alcuni aggiornamenti nella struttura del progetto e nel file applicationContext.xml. Innanzitutto, nella cartella delle risorse, aggiungi un nuovo file con estensione .properties . Ho chiamato questo file "myApp.properties". Ora la struttura del progetto ha assunto la seguente forma: Primavera.  Lezione 4. L'attributo value per incorporare valori - 1 E nel file scriveremo i seguenti valori:
employee.citizenship="Russia"
employee.salary=6000
A sinistra del segno "=" ci sono i nomi delle variabili (se possono essere chiamate così), e a destra ci sono i valori di queste variabili. Puoi dare il nome come preferisci, ma come al solito, con un significato. E sì, il punto qui gioca un ruolo strategico, non sintattico. Diciamo che abbiamo anche dei manager, anch'essi con i propri stipendi. Quindi possiamo semplicemente nominare queste variabili in questo modo: manager.salary. Cioè, i nomi delle variabili non coincideranno e interferiranno tra loro. Ora aggiorniamo il file applicationContext.xml. Prima di dichiarare i bean, è necessario scrivere la seguente riga:
<context:property-placeholder location="classpath:myApp.properties"/>
Qui definiamo il file che abbiamo creato per incorporare i valori. E poi nell'attributo value inseriamo il simbolo del dollaro $ tra virgolette doppie e tra parentesi graffe {} scriviamo il nome della variabile dal file myApp.properties:
<property name="salary" value="${employee.salary}"/>
Di conseguenza, Spring cerca questa variabile, ne ottiene il valore e la associa all'oggetto della classe. Il codice completo è simile al seguente: Listato 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>
Lanciamo il programma:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Come sempre, il modo migliore per imparare a programmare è programmare. Ripeti ciò che hai imparato tu stesso, prova ad aggiornare gli elementi, gioca con il codice. In breve, provaci. E questo è tutto per me. Grazie per l'attenzione! Codice sorgente al link Il mio GitHub Unisciti al mio canale Telegram Contenuto del corso Continua...
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION