본문 바로가기

자바/SpringFrameWork

[스프링퀵스타트1-4] : 의존성 주입-(3)

4.3 Setter 인젝션 이용하기

 

" 앞서 작성한 것 처럼, 스프링 컨테이너의 역할 중 하나에 의존성 주입이 있다. 이 의존성 주입 방법은 크게 2가지가 있는데, 첫번째가 생성자를 이용한 방법이고, 두번째는 Setter 메소드를 이용한 방법이다. 여기서는 Setter 메소드를 이용해 본다."

 

# 참고자료 1. setter 메소드 추가한 삼성TV 클래스

package polymorphism_dependency;

public class SamsungTV implements TV {
	//* private SonySpeaker speaker; "Speaker 인터페이스 생성 전"
	private Speaker speaker;
	private int price;
	
	/*public SamsungTV(){
		System.out.println("===> SamsungTV(1) 객체 생성");
	}*/
	/*public SamsungTV(Speaker speaker){
		System.out.println("===> SamsungTV(2) 객체 생성");
		this.speaker = speaker;
	} 
	public SamsungTV(Speaker speaker, int price){
		System.out.println("===> SamsungTV(3) 객체 생성");
		this.speaker=speaker;
		this.price=price;
	}*/
	public void setSpeaker(Speaker speaker) {
		System.out.println("===> setSpeaker() 호출");
		this.speaker = speaker;
	}

	public void setPrice(int price) {
		System.out.println("===> setprice() 호출");
		this.price = price;
	}
	public void powerOn(){
		System.out.println("Samsung---전원 켠다.( 가격 :"+price+")");
	}

	public void powerOff(){
		System.out.println("Samsung---전원 끈다.");
	}
	public void volumeUp(){
//		speaker = new SonySpeaker(); //생성자 생성 되며, 의미 없어짐.
		speaker.volumeUp();
	}
	public void volumeDown(){
//		speaker = new SonySpeaker(); //생성자 생성 되며, 의미 없어짐.
		speaker.volumeDown();
	}
}

# 참고자료 2. 스프링 설정 파일 내의 "<property>~</property>" 엘리먼트를 사용한 Setter 인젝션 주입

- <property> 엘리먼트의 규칙에 대해서 주의해야 한다. ( * 멤버변수 이름 앞을 대문자로 교체 후, "set"을 붙인 것이   호출할 메소드의 이름이다.

- 예시

클래스 내 메소드 이름 설정파일(.xml) 내 name 속성값
setSpeaker() name="speaker"
setAddressList() name="addressList"
setBoardDAO() name="boardDAO"
<?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="tv" class="polymorphism_dependency.SamsungTV">
	<property name="speaker" ref="apple"></property>
	<property name="price" value="2700000"></property>
</bean>

<bean id="sony" class="polymorphism_dependency.SonySpeaker"></bean>
<bean id="apple" class="polymorphism_dependency.AppleSpeaker"></bean>
</beans>

4.3.2  p 네임스페이스 사용하기

: setter 메소드로 의존성 주입을 할 경우, 'p 네임 스페이스' 를 사용하면 조금 더 효율성 있는 의존성 주입을 할 수 있다.

 

# 참고자료 1. 'p 네임 스페이스'를 이용한 setter의존성 주입 방법 이다.'

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism_dependency.SamsungTV" p:speaker-ref="sony" p:price="2700000">
	
</bean>

<bean id="sony" class="polymorphism_dependency.SonySpeaker"></bean>
<bean id="apple" class="polymorphism_dependency.AppleSpeaker"></bean>
</beans>