본문으로 바로가기

3. 스프링 의존관계 테스트

category 개발/스프링 2020. 10. 9. 09:40
728x90

의존관계 테스트

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>

 

728x90

'개발 > 스프링' 카테고리의 다른 글

[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