스프링의 의존성 관리방법

스프링 프레임워크의 특징 : 객체의 생성과 의존관계를 컨테이너가 자동으로 관리한다.(IoC)

 

IoC 지원 형태

Dependency Lookup

컨테이너가 애플리케이션 운용에 필요한 객체를 생성하고 클라이언트는 컨테이너가 생성한 객체를 검색하여 사용하는 방식(실제 개발에서 사용하지 않는다.)

 

Dependency Injection

객체 사이의 의존관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리해 준다. 따라서 의존성 설정을 바꾸고 싶을 때 프로그램 코드를 수정하지않고 스프링 설정 파일 수정만으로 변경사항을 적용할 수 있다.(유지보수 향상)

컨테이너가 직접 객체들 사이에 의존관계를 처리하는 것.

DI는 Setter Injection과 Constructor Injection으로 나뉜다. (두 방법 모두 멤버변수를 원하는 값으로 설정하는 것을 목적으로 하고 있어 결과 값은 같다.)

 

Constructor Injection : 스프링 설정파일에 <constructor-arg> 를 사용한다. <bean> 태그 안에서 선언한다.

 

<constructor-arg> 태그 속성 설명

ref  생성자 인자로 전달할 객체의 아이디를 참조한다.
value  매개변수로 전달된 데이터가 기본형타입일 때 사용, 매개변수로 전달될 값 지정.
index  매개변수의 번호(순서) 지정

 

xml 파일 예시

<bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod" destroy-method="endMethod" lazy-init="true" scope="singleton">
		
		<!-- Constructor Injection -->
		<constructor-arg index="0" ref="apple"/>
		<constructor-arg index="1" value="270000"/>
		
</bean>
	
<bean id="sony" class="polymorphism.SonySpeaker"/>
<bean id="apple" class="polymorphism.AppleSpeaker"/>



Setter Injection : 스프링 설정파일에 <constructor-arg>대신 <property> 를 사용한다. <bean> 태그 안에서 선언한다.

 

<property>태그 속성 설명

name   속성값은 호출하고자 하는 메소드 이름 (속성값이 speaker이면 setSpeaker()를 호출한다.)
ref   setter 메소드를 호출하면서 다른객체를 인자로 넘길 때 사용.
value   매개변수로 전달된 데이터가 기본형타입일 때 사용, 매개변수로 전달될 값 지정.

 

xml 파일 예시

<bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod" destroy-method="endMethod" lazy-init="true" scope="singleton">
		
		<!-- Setter Injection -->
		<property name="speaker" ref="sony"></property>
		<property name="price" value="270000"></property>
		
</bean>
	
<bean id="sony" class="polymorphism.SonySpeaker"/>
<bean id="apple" class="polymorphism.AppleSpeaker"/>

 

 

참조 문헌 - 스프링 퀵 스타트

+ Recent posts