본문 바로가기
boostcource/boostcourse_web programming

xml파일을 이용한 설정-2

by sgyeong 2024. 6. 21.

DI ( Dependency Injection , 의존성 주입)

 

DI실습을 위해 Car 클래스와 Engine 클래스를 만들어준다. 

 

 

Engine 클래스는 기본생성자와 exec 생성자를 가지고 있다.

 

 

 

 

Car 클래스는 필드로 v8 Engine을 가지고 있으며, 기본 생성자를 가지고 있다.

 

 

 

 

그리고 메서드로 setEngine을 갖고 있다. Engine이라는 메서드가 실행될때 engine 타입의 engine을 받아와서 car의 

v8에 받아온 engine을 넣어준다.

 

 

다음으로 자동차가 달릴때 사용하는 run 메서드가 있다. run 메서드에선 엔진이 갖고 있는 exec 메서드를 실행한다.

 

엔진을 이용해서 차가 달리게 된다. 

 

 

자동차라는 클래스가 동작하려면 엔진 클래스가 있어야 한다. (엔진 생성)

다음으로 자동차를 생성한다.

자동차가 갖고 있는 setEngine 메서드에 생성된 엔진을 넣어준다.

자동차의 run을 실행한다.

 

해당 메인 메서드에서 객체를 생성하고 있는데 이 부분을 제어의 역전으로 넘길 것이다. 

 

이러한 과정을 spring 컨테이너가 하게 하려면 설정파일에 해당 bean을 등록한다. 

그 부분을 수행하기 위해 resources의 applicationContext.xml에 bean을 등록해준다.

 

 

하지만 이렇게만 하면 engine과 car의 instance가 싱글톤으로 생성이 될 것이다.

 

car instance에 engine을 set하려면 bean 의 안쪽에 property element를 사용한다. property는 setter getter 중 하나이다. name이 engine인 setEngine 혹은 getEngine을 의미한다.

그런데 bean 태그 안에서는 모두 값을 설정한다. 따라서 setEngine 메서드를 의미한다. setEngine 메서드는 파라미터로 engine 타입을 받는다. 다시 말해 id가 e로 선언된 인스턴스를 setEngine 메서드에 파라미터로 전달해 달라는 의미를 갖는다.

 

 

해당 설정을 읽어서 실행하는 ApplicationContext02 클래스를 만들어준다.

 

ApplicationContext02 에 메인 메서드에서는 spring container가 필요하다.

spring container중 application container를 이용할 것이고, application container를 구현하고 있는 ClassPathXml

application을 이용할 것이다.

 

클래스의 생성자에 해당 application에 대한 정보를 넘겨준다.

 

 

다음으로 자동차 객체를 생성한다.

자동차 객체를 생성하는 주체는 spring container이다. applicationContext가 갖고 있는 getBean 메서드를 이용한다. 이때 applicationContext에 등록했던 bean id를 이용한다. 

마지막으로 자동차가 가진 run 메서드로 실행시킨다.

 

 

 

 

실행 결과

 

 

 

 

 

 

 

 

 

참고 : boostcourse    https://www.boostcourse.org/web316/lecture/254336?isDesc=false

 

웹 프로그래밍(풀스택)

부스트코스 무료 강의

www.boostcourse.org

 

'boostcource > boostcourse_web programming' 카테고리의 다른 글

Spring JDBC를 이용한 DAO 개발  (0) 2024.06.30
Spring JDBC  (1) 2024.06.30
xml 파일을 이용한 설정  (1) 2024.06.16
Spring IoC/DI 컨테이너  (0) 2024.06.16
Spring  (0) 2024.06.15