JavaRush /Java Blog /Random-KO /봄. 4단원: 값 삽입을 위한 값 속성
Umaralikhon
레벨 3
Красноярск

봄. 4단원: 값 삽입을 위한 값 속성

Random-KO 그룹에 게시되었습니다
그래서... 우리는 봄에 강좌를 계속합니다. 지난 강의 에서 우리는 setter를 사용하여 의존성 주입을 공부했습니다. 눈치 채셨다면 ID에 대한 링크를 사용하여 값을 구현했습니다. 즉, ref 속성을 사용하여 구현이 이루어졌습니다. 이는 다음과 같습니다. 목록 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
여기서 4번째 줄은 JavaDevelopment 클래스의 값을 구현하는 ID "javaDeveloper"를 나타냅니다. 값을 수동으로 주입하거나 다른 방법으로 가져온 다음 주입하려면 어떻게 해야 할까요? 예를 살펴보겠습니다. 각 직원은 시민권과 급여를 갖습니다. 그리고 이러한 엔터티를 HiringDepartment 클래스에 정의하도록 합니다. 다음과 같이 가정해 보겠습니다. 목록 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;
    }
}
여기에 2개의 필드를 추가했습니다. int 급여문자열 시민권 . 또한 이러한 개체에 대한 getter 및 setter도 정의했습니다. 다시 말해, Spring은 값을 클래스 객체에 바인딩하기 위해 배후에서 이러한 getter 및 setter를 참조합니다. 아직 다른 클래스는 건드리지 않았습니다. 그런 다음 객체에 대한 Bean을 정의하는 applicationContext 파일을 다시 실행합니다. 이는 다음과 같습니다. 목록 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>
목록 1과 달리 여기에는 두 가지 속성이 더 추가되었습니다(12행과 13행). 여기에서 속성 태그 내부에 정의된 value 속성이 작동하게 됩니다 . name 속성의 값은 빈이 참조하는 객체와 일치해야 한다는 점을 다시 한 번 상기시켜드리겠습니다. 그런 다음 Spring은 이러한 값을 사용하여 getter와 setter를 독립적으로 결정합니다. 그리고 value 속성을 사용하여 필드의 값을 구현합니다. int 유형에서는 일반적이지 않지만 두 값 값 모두 따옴표로 정의됩니다. 그러나 언제나 그렇듯이 Spring은 어떤 값이 어떤 유형과 연관되어야 하는지를 결정합니다. 이는 name 속성 으로 인해 발생합니다 . Bean의 이름으로 Spring은 클래스의 객체를 참조하고 이 객체의 유형을 결정합니다. 글쎄, 그게 다야. 이제 남은 것은 Main 클래스의 업데이트를 확인하는 것입니다. 목록 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(); //Контекст всегда должен закрываться
    }
}
여기서는 많이 변경할 필요가 없습니다. 결과를 얻기 위해서만 표준 출력 스트림을 사용하여 HiringDepartment 클래스의 getter를 호출합니다. 결과적으로 우리는 다음과 같은 답을 얻습니다.
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
좋아요. 동일한 시민권을 갖고 동일한 급여를 받는 직원 10명이 있다고 가정해 보겠습니다. 그리고 회사가 급여를 인상하기로 결정했다고 가정해 보겠습니다. 그런 다음 이 10개 값을 모두 수동으로 변경해야 합니다. 너무 지루해요. 이러한 값을 별도의 파일에 정의하고 이 값을 빈과 연결하면 어떻게 될까요? 그런 다음 이 파일에서 값을 한 번만 변경하면 이 값을 참조하는 나머지 Bean이 자동으로 변경됩니다. 시도해 보겠습니다... 이를 위해 프로젝트 구조와 applicationContext.xml 파일에서 일부 업데이트를 수행하겠습니다. 먼저 리소스 폴더에 확장자가 .properties 인 새 파일을 추가합니다 . 이 파일의 이름을 "myApp.properties"로 지정했습니다. 이제 프로젝트 구조는 다음 형식을 취합니다. 봄.  강의 4. 값 삽입을 위한 값 속성 - 1 그리고 파일에 다음 값을 작성합니다.
employee.citizenship="Russia"
employee.salary=6000
"=" 기호 왼쪽에는 변수 이름(그렇게 불릴 수 있는 경우)이 있고 오른쪽에는 이러한 변수의 값이 있습니다. 원하는 대로 이름을 지정할 수 있지만 평소와 같이 의미가 있는 이름을 지정하십시오. 그리고 그렇습니다. 여기서 마침표는 구문론적인 역할이 아니라 전략적 역할을 합니다. 급여를 받는 관리자도 있다고 가정해 보겠습니다. 그런 다음 이 변수의 이름을 다음과 같이 간단히 지정할 수 있습니다: Manager.salary. 즉, 변수의 이름이 일치하지 않고 서로 간섭하게 됩니다. 이제 applicationContext.xml 파일을 업데이트해 보겠습니다. Bean을 선언하기 전에 다음 줄을 작성해야 합니다.
<context:property-placeholder location="classpath:myApp.properties"/>
여기서는 값을 포함하기 위해 만든 파일을 정의합니다. 그런 다음 value 속성에 달러 기호 $를 큰따옴표로 묶고 중괄호 {} 안에 myApp.properties 파일의 변수 이름을 씁니다.
<property name="salary" value="${employee.salary}"/>
결과적으로 Spring은 이 변수를 찾아 그 값을 얻고 이를 클래스 객체에 연결합니다. 전체 코드는 다음과 같습니다. 목록 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>
프로그램을 실행해 봅시다:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
언제나 그렇듯이 프로그래밍을 배우는 가장 좋은 방법은 프로그래밍하는 것입니다. 스스로 배운 내용을 반복하고, 요소를 업데이트하고, 코드를 가지고 놀아보세요. 즉, 가십시오. 그리고 그게 전부입니다. 관심을 가져주셔서 감사합니다! 내 GitHub 링크 의 소스 코드 내 전보 채널에 가입하세요. 코스 내용 계속하려면...
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION