JavaRush /Java Blog /Random-KO /봄. Lesson 3. setter를 이용한 DI
Umaralikhon
레벨 3
Красноярск

봄. Lesson 3. setter를 이용한 DI

Random-KO 그룹에 게시되었습니다
그래서... 우리는 봄에 강좌를 계속합니다. 지난 수업 에서 우리는 클래스 생성자를 사용하여 종속성을 주입하는 방법을 배웠습니다. 이제 setter를 사용하는 또 다른 종속성 주입 방법을 소개할 시간입니다 . 이전 수업의 기억을 되살리기 위해 우리 프로그램의 구조를 보여 드리겠습니다. 봄.  Lesson 3. setter를 이용한 DI - 1 우리는 HiringDepartment 및 applicationContext 파일에만 관심이 있습니다. 그들은 우리 프로젝트를 관리합니다. 우리는 그것들을 다시 실행할 것입니다. 다음은 HiringDepartment 파일의 이전 코드입니다. (목록 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());
    }
}
여기서 볼 수 있듯이 생성자는 Development 유형의 개체를 초기화하는 데 사용됩니다. 이 생성자를 제거합니다(또는 그대로 두어도 아무런 차이가 없습니다). 다음 예와 같이 setter를 작성해 보겠습니다. (목록 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());
    }
}
이제 resources 폴더에 있는 applicationContext.xml 파일을 열어보겠습니다. 다음과 같습니다. (목록 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>
우리가 기억하는 것처럼(또는 기억하지 못하는 경우) <constructor-arg ref="javaDeveloper"/> 줄에서 종속성은 생성자를 사용하여 주입됩니다. 이제 아래와 같이 setter에 대해 이 줄을 다시 작성해야 합니다.
<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>
여기서 정확히 무슨 일이 일어나고 있는 걸까요? < property name="development" ref="pythonDeveloper"/> 줄은 " property " 키워드를 사용하여 setter를 사용하여 종속성을 주입합니다. Spring은 우리 예제에서 pythonDeveloper 객체가 어떤 setter와 연결되어야 하는지 어떻게 알아냈나요 ? 결과 속성="..." 값을 확인하세요 . "개발" 이라고 쓰여 있습니다 . 그리고 HiringDepartment 파일의 setter는 setDevelopment 라고 합니다 . Spring은 개발의 가치를 무대 뒤에서 setDevelopment 로 변환합니다 . 즉, 첫 번째 문자는 대문자로 표시되고 접두사 set(developmet -> setDevelopment)가 단어 시작 부분에 배치됩니다. 봄.  Lesson 3. setter를 이용한 DI - 2후드 아래에는 무엇이 있나요? 우리가 보는 것: javaDeveloper 및 pythonDeveloper라는 ID로 두 개의 빈이 생성됩니다.
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
실제로 일어나는 일: Spring은 JavaDevelopment 및 PythonDevelopment 유형의 두 객체를 생성합니다.
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
그리고 여기에 우리가 볼 수 있는 것이 있습니다. ID가 EmploymentDepartment인 Bean이 생성됩니다. 그런 다음 위에서 생성된 개체 중 하나의 ID가 속성에 할당됩니다.
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
실제로 일어나는 일: HiringDepartment 유형의 객체가 생성됩니다. 그런 다음 이 클래스 setDevelopment(개발 개발)의 set 메소드가 호출됩니다. 그리고 참조 값(생성된 개체의 ID)이 인수로 전달됩니다.
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
애플리케이션을 실행합니다:
Name: Mike
Job: Middle Python developer
그게 내가 가진 전부입니다. 관심을 가져주셔서 감사합니다! 내 GitHub 장바구니 코스 콘텐츠 링크 의 소스 코드 계속하려면...
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION