1. 스프링의 의존성 관리 방법
① Dependency Lookup
② Dependency Injection : 객체 사이의 의존 관계를 스프링 설정 파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 처리
- Constructor Injection (생성자 인젝션)
- Setter Injection (Setter 인젝션)
2. 의존성 관계 (이런 방법은 사용하지 않으니 참고만 하도록 한다.) → 의존성 주입이 필요한 이유
- SonySpeaker 클래스 생성
package polymorphism;
public class SonySpeaker {
public SonySpeaker() {
System.out.println("===> SonySpeaker 객체 생성");
}
public void volumeUp() {
System.out.println("SonySpeaker --- 소리 올린다.");
}
public void volumeDown() {
System.out.println("SonySpeaker --- 소리 내린다.");
}
}
- SamsungTV 클래스에서 SonySpeaker 객체 사용
package polymorphism;
public class SamsungTV implements TV {
private SonySpeaker speaker; //SonySpeaker 객체 생성 준비
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(); //SonySpeaker 객체 생성
speaker.volumeUp();
}
public void volumeDown() {
speaker = new SonySpeaker(); //SonySpeaker 객체 생성
speaker.volumeDown();
}
}
- 실행 클래스
package polymorphism;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVUser {
public static void main(String[] args) {
//1. Spring 컨테이너 구동
AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
//2. Spring 컨테이너로부터 필요한 객체를 요청(Lookup)
TV tv = (TV) factory.getBean("tv"); //이름이 tv인 객체(bean의 id)를 getBean() 메소드를 이용하여 요청
tv.powerOn();
tv.volumeUp();
tv.volumeDown();
tv.powerOff();
//3. Spring 컨테이너 종료
factory.close();
}
}
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Wed Jan 19 11:50:29 KST 2022]; root of context hierarchy
===> SamsungTV 객체 생성
SamsungTV --- 전원 켠다.
===> SonySpeaker 객체 생성
SonySpeaker --- 소리 올린다.
===> SonySpeaker 객체 생성
SonySpeaker --- 소리 내린다.
SamsungTV --- 전원 끈다.
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@1c655221: startup date [Wed Jan 19 11:50:29 KST 2022]; root of context hierarchy
→ SonySpeaker 객체가 쓸데 없이 두번 생성되며, SonySpeaker에서 다른 speaker로 변경하고자 할 때, volumeUp(), volumeDown() 메소드 내 소스를 모두 수정해야 하는 번거로움이 있음 → 이를 "의존성 주입"으로 해결!!
'Spring > 2. 스프링 IoC' 카테고리의 다른 글
Day 67 : 어노테이션 설정 기초 (@Component) (0) | 2022.01.19 |
---|---|
Day 67 : 컬렉션(Colletion) 객체 설정 (0) | 2022.01.19 |
Day 67 : Setter 인젝션 (0) | 2022.01.19 |
Day 67 : 생성자 인젝션 (Constructor Injection) (0) | 2022.01.19 |
Day 66 : 스프링 컨테이너 및 설정 파일 (0) | 2022.01.18 |