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>
'자바 > SpringFrameWork' 카테고리의 다른 글
[스프링퀵스타트1-5] : 어노테이션 기반 설정-(1) (0) | 2020.05.22 |
---|---|
[스프링퀵스타트1-4] : 의존성 주입-(4) (0) | 2020.05.22 |
[스프링퀵스타트1-4] : 의존성 주입-(2) (0) | 2020.05.22 |
[스프링퀵스타트1-4] : 의존성 주입-(1) (0) | 2020.05.19 |
[스프링퀵스타트1-3] 프레임 워크 개요-(3) (0) | 2020.05.17 |