namespaces에서 context 추가
<?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"
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.3.xsd">
<!--
base-package에 설정된 패키지를 포함해서 하부를 모두 scan해서
@Component나 @Component로부터 파생된 어노테이션이 설정된 클래스를
모두 bean으로 생성해라
-->
<context:component-scan base-package="polymorphism"></context:component-scan>
</beans>
package polymorphism;
import org.springframework.stereotype.Component;
//id나 name 미지정시 자동으로 lgTV(앞글자 소문자)로 bean을 요청할 수 있다
@Component
public class LgTV implements TV {
public void powerOn() {
System.out.println("LgTV -- 전원 켠다");
}
public void powerOff() {
System.out.println("LgTV -- 전원 끈다");
}
public void volumeUp() {
System.out.println("LgTV -- 소리 올린다");
}
public void volumeDown() {
System.out.println("LgTV -- 소리 내린다");
}
}
TVUser
package polymorphism;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class TVUser {
static BeanFactory factory = new BeanFactory();
public static void main(String[] args) {
AbstractApplicationContext factory =
new GenericXmlApplicationContext("applicationContext.xml");
TV tv = (TV)factory.getBean("lgTV");
tv.powerOn();
tv.powerOff();
tv.volumeUp();
tv.volumeDown();
factory.close();
}
}
name을 주면 name으로 사용.
Autowired (자동주입)
LgTV
SonySpeaker
sonyspeaker가 동작한다.
Qualifier
: appleSpeaker에도 component를 추가하면 autowired는 어떤 객체를 주입할지 대상을 모른다. 그럴 때 qualifier를 사용할 수 있다.
Resource
annotaion+xml
sony speaker에서 component 삭제 후 xml파일에 bean 이용
병합해도 잘 사용된다.