<context:component-scan base-package="test"/>
context라는 네임스페이스에서
component-scan이라는 기능의 엘리먼트(태그)를 꺼내어사용중
component == Bean == 모듈 == 위젯
"test"라는 이름의 패키지를 스캔해줘!~~
패키지 안에 있는 파일들 보면서 어노테이션을 일일이 확인후 메모리 로딩
GalaxyPhone gp = new GalaxyPhone();
== <bean class = "test.GalaxyPhone" id = "gp"/>
== @Component("gp")
1) @Component
-> NPE (null pointer exception) 의존 주입 자체를 안함
=> 의존관계를 가진 watch가 DI되지 않아기때문에 오류발생
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="test" />
<bean class="test.GalaxyWatch" id="watch" />
<context:component-scan base-package="day59"/>
<bean class = "day59.RemoteA" id="a"/>
<bean class="day59.LgTV" id = "tv">
<property name ="remote" ref="b"/>
</bean>
package day59;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("sTV")
public class SamsungTV implements TV {
@Autowired
private Remote remote;
// 1. 의존관계 발생
// 2. 의존 주입(DI)
// 1) 생성자 주입
// 2) setter 주입
// 3. 설정(.xml)
// : POJO -> 스프링 컨테이너한테 설정을 해야하므로 applicationContext.xml
// 만약에 not POJO(서블릿)였다면 서블릿 컨테이너(톰캣)한테 설정을 해야하므로 web.xml
public SamsungTV() {
System.out.println("삼성TV 기본생성자");
}
public SamsungTV(Remote remote) { // 생성자 DI(2-1)을 위한 생성자를 오버로딩
this.remote=remote;
System.out.println("삼성TV 생성자");
}
@Override
public void funcA() {
remote.funcA();
System.out.println("SamsungTV 전원 ON/OFF");
}
@Override
public void funcB() {
remote.funcB();
System.out.println("SamsungTV 채널변경");
}
}