의존관계 테스트
package polymorphism;
public class SamsungTV implements TV {
private SonySpeaker speaker;
public SamsungTV() {
System.out.println("===> SamsungTV 객체 생성");
}
public void powerOn() {
System.out.println("SamsungTV---전원을 켠다.");
}
public void powerOff() {
System.out.println("SamsungTV---전원을 끈다.");
}
public void volumeUp() {
speaker = new SonySpeaker();
speaker.volumeUp();
}
public void volumeDown() {
speaker = new SonySpeaker();
speaker.volumeDown();
}
}
1. 생성자 인젝션
xml 설정하기 - applicationContext.xml
<?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/bea
ns http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism.SamsungTV">
<constructor-arg ref="sony"></constructor-arg>
</bean>
<bean id="sony" class="polymorphism.SonySpeaker"></bean>
</beans>
package polymorphism;
public class SamsungTV implements TV {
private SonySpeaker speaker;
public SamsungTV() {
System.out.println("===> SamsungTV (1) 객체 생성");
}
public SamsungTV(SonySpeaker speaker){
System.out.println("===> SamsungTV(2) 객체 생성");
this.speaker = speaker;
}
public void powerOn() {
System.out.println("SamsungTV---전원을 켠다.");
}
public void powerOff() {
System.out.println("SamsungTV---전원을 끈다.");
}
public void volumeUp() {
speaker.volumeUp();
}
public void volumeDown() {
speaker.volumeDown();
}
}
package polymorphism;
public class SamsungTV implements TV {
private SonySpeaker speaker;
private int price;
public SamsungTV() {
System.out.println("===> SamsungTV(1) 객체 생성");
}
public SamsungTV(SonySpeaker speaker){
System.out.println("===> SamsungTV(2) 객체 생성");
this.speaker = speaker;
}
public SamsungTV(SonySpeaker speaker, int price){
System.out.println("===> SamsungTV(3) 객체 생성");
this.speaker = speaker;
this.price = price;
}
public void powerOn() {
System.out.println("SamsungTV---전원을 켠다. (가격 : "+price+")");
}
… 중략 …
}
xml 설정 - applicationContext.xml - 다중 변수 매핑
<?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/bea
ns http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism.SamsungTV">
<constructor-arg ref="sony"></constructor-arg>
<constructor-arg value="1500000"></constructor-arg>
</bean>
<bean id="sony" class="polymorphism.SonySpeaker"></bean>
</beans>
의존관계 변경 : 다른 스피커로 변경하는 상황 발생
package polymorphism;
public interface Speaker {
void volumeUp();
void volumeDown();
}
package polymorphism;
public class AppleSpeaker implements Speaker {
public AppleSpeaker() {
System.out.println("===> AppleSpeaker 객체 생성");
}
public void volumeUp() {
System.out.println("AppleSpeaker---소리 올린다.");
}
public void volumeDown() {
System.out.println("AppleSpeaker---소리 내린다.");
}
}
의존관계 변경 : Speaker 인터페이스 추가
package polymorphism;
import org.springframework.stereotype.Component;
public class SonySpeaker implements Speaker {
public SonySpeaker() {
System.out.println("===> SonySpeaker 객체 생성");
}
public void volumeUp() {
System.out.println("SonySpeaker---소리 올린다.");
}
public void volumeDown() {
System.out.println("SonySpeaker---소리 내린다.");
}
}
xml 설정 - applicationContext.xml - 다중 변수 매핑
<?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/bea
ns http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism.SamsungTV">
<constructor-arg ref=“apple"></constructor-arg>
<constructor-arg value="1800000"></constructor-arg>
</bean>
<bean id="sony" class="polymorphism.SonySpeaker"></bean>
<bean id=“apple" class="polymorphism.AppleSpeaker"></bean>
</beans>
2. Setter 인젝션
의존성 처리 : Setter 인젝션
package polymorphism;
public class SamsungTV implements TV {
private Speaker speaker;
private int price;
public SamsungTV() {
System.out.println("===> SamsungTV(1) 객체 생성");
}
public void setSpeaker(Speaker speaker) {
System.out.println("===> setSpeaker(); 호출");
this.speaker = speaker;
}
public void setPrice(int price) {
System.out.println("===> setPrice(); 호출");
this.price = price;
}
…중략…
}
xml설정
<?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/bea
ns http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="polymorphism.SamsungTV">
<property name="speaker" ref="apple"></property>
<property name="price" value="1800000"></property>
</bean>
<bean id="sony" class="polymorphism.SonySpeaker"></bean>
<bean id="apple" class="polymorphism.AppleSpeaker"></bean>
</beans>
'기타 > 스프링' 카테고리의 다른 글
[Spring] ant_path_mathcher (0) | 2022.05.29 |
---|---|
4. 스프링 어노테이션(Annotation) (0) | 2020.10.09 |
2. 스프링의 시작_2 (0) | 2020.10.09 |
1. 스프링 시작 (0) | 2020.09.18 |