JavaRush /Blogue Java /Random-PT /Primavera. Lição 4: O atributo de valor para incorporar v...
Umaralikhon
Nível 3
Красноярск

Primavera. Lição 4: O atributo de valor para incorporar valores

Publicado no grupo Random-PT
E assim... Continuamos o nosso rumo na Primavera. Na última lição estudamos injeção de dependência usando um setter. Se você percebeu, implementamos valores usando links para id. Ou seja, a implementação ocorreu utilizando o atributo ref. Parecia algo assim: Listagem 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
Aqui, 4 linhas referem-se ao id "javaDeveloper", que implementa o valor da classe JavaDevelopment. E se quisermos injetar os valores manualmente ou obter de alguma outra forma e depois injetar. Vejamos um exemplo. Cada funcionário tem cidadania e salário. E deixe essas entidades serem definidas na classe HiringDepartment. Digamos isto: Listagem 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;
    }
}
Aqui adicionamos 2 campos. salário interno e cidadania String . Também definimos getters e setters para esses objetos. Como lembrete, Spring refere-se a esses getters e setters nos bastidores para vincular valores a objetos de classe. Ainda não estamos tocando em outras classes. E então refazemos o arquivo applicationContext, que define os beans para nossos objetos. E fica assim: Listagem 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>
Diferentemente da Listagem 1, mais duas propriedades foram adicionadas aqui (linhas 12 e 13). É aqui que entra em jogo o atributo value , que é definido dentro da tag de propriedade. Deixe-me lembrá-lo mais uma vez que o valor do atributo name deve corresponder ao objeto ao qual o bean se refere. E então o Spring determina getters e setters de forma independente usando esses valores. E usando o atributo value implementamos valores para os campos. Observe que ambos os valores são definidos entre aspas, embora isso seja incomum para o tipo int. Mas o Spring, como sempre, determina qual valor deve ser associado a qual tipo. Isso acontece devido ao atributo name . Pelo nome do bean, Spring se refere a um objeto da classe e determina o tipo desse objeto. Bom, isso é tudo. Agora só falta conferir nossas atualizações na classe Main: Listagem 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(); //Контекст всегда должен закрываться
    }
}
Não há necessidade de mudar muito aqui. Somente para obter resultados chamamos getters da classe HiringDepartment usando o fluxo de saída padrão. Como resultado, obtemos a seguinte resposta:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
OK. Digamos que temos 10 desses funcionários que têm a mesma cidadania e recebem o mesmo salário. E digamos que a empresa decidiu aumentar seus salários. Então você terá que alterar manualmente todos esses 10 valores. É muito chato. E se definirmos esses valores em um arquivo separado e associarmos esses valores aos beans? Então só teríamos que alterar o valor uma vez neste arquivo, e os beans restantes que fazem referência a esse valor seriam alterados automaticamente. Vamos tentar... Para isso faremos algumas atualizações na estrutura do projeto e no arquivo applicationContext.xml. Primeiro, na pasta de recursos, adicione um novo arquivo com a extensão .properties . Chamei esse arquivo de "myApp.properties". Agora a estrutura do projeto assumiu a seguinte forma: Primavera.  Lição 4. O atributo de valor para incorporação de valores - 1 E no arquivo escreveremos os seguintes valores:
employee.citizenship="Russia"
employee.salary=6000
À esquerda do sinal "=" estão os nomes das variáveis ​​(se puderem ser chamadas assim) e à direita estão os valores dessas variáveis. Você pode dar o nome que quiser, mas como sempre, com significado. E sim, o período aqui desempenha um papel estratégico, não sintático. Digamos que também temos gestores, também com salários próprios. Então podemos simplesmente nomear essas variáveis ​​da seguinte forma: manager.salary. Ou seja, os nomes das variáveis ​​não coincidirão e interferirão entre si. Agora vamos atualizar o arquivo applicationContext.xml. Antes de declarar beans, você deve escrever a seguinte linha:
<context:property-placeholder location="classpath:myApp.properties"/>
Aqui definimos o arquivo que criamos para incorporar os valores. E então no atributo value colocamos um cifrão $ entre aspas duplas e entre chaves {} escrevemos o nome da variável do arquivo myApp.properties:
<property name="salary" value="${employee.salary}"/>
Como resultado, o Spring procura essa variável, obtém seu valor e a anexa ao objeto da classe. O código completo fica assim: Listagem 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>
Vamos lançar o programa:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Como sempre, a melhor maneira de aprender programação é programando. Repita o que você aprendeu, tente atualizar os elementos, brinque com o código. Resumindo, vá em frente. E isso é tudo para mim. Obrigado pela sua atenção! Código fonte no link Meu GitHub Entre no meu canal de telegram Conteúdo do curso Continua...
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION