Spring, Spring Framework IoC XML파일로 설정하기
IoC
생성자 인젝션 이용하기(Constructor Injection)
- 자바 소스코드는 변경하지 않고 컨테이너 설정파일만 변경해서 객체를 생성할수있다.
- 아래 xml파일에서 bean의 id값에 해당하는 값을 constructor-arg(생성자 매개변수)태그의 ref에 적절하게 넣으면 된다
<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tv" class="com.springbook.biz.polymorphism.SamsungTV">
<constructor-arg index="0" ref="apple"></constructor-arg>
<constructor-arg index="1" value="20000000"></constructor-arg>
</bean>
<bean id="sony" class="com.springbook.biz.polymorphism.SonySpeaker"></bean>
<bean id="apple" class="com.springbook.biz.polymorphism.AppleSpeaker"></bean>
</beans>
- SamsungTV.java
package com.springbook.biz.polymorphism;
public class SamsungTV implements TV{
private Speaker speaker;
private int price;
public SamsungTV() {
System.out.println("SamsungTV(1) 객체 생성");
}
public SamsungTV(Speaker speaker, int price) {
System.out.println("SamsungTV(2) 객체 생성");
this.speaker = speaker;
this.price = price;
}
// 중략
}
결과 화면
-
에 apple을 넣었으므로 AppleSpeaker클래스의 객체가 매개변수로 들어갔으므로 노란줄에 출력된다
- 빨간줄은
bean 태그로 설정하여 처음에 객체를 만들어줬기 때문에 출력되었다
Setter 인젝션 이용하기
- 대부분 Setter인젝션을 사용하며, Setter메소드가 제공되지 않는 클래스에 대해서만 생성자 인젝션을 사용한다
예제
- 컨테이너 설정
- property태그를 이용하여 name에 있는 함수를 실행한다.
- name=”speaker” 이면 앞에 set을 붙인 함수가 실행된다(setSpeaker())
<bean id="tv" class="com.springbook.biz.polymorphism.SamsungTV">
<property name="speaker" ref="apple"></property>
<property name="price" value="200000000"></property>
</bean>
<bean id="sony" class="com.springbook.biz.polymorphism.SonySpeaker"></bean>
<bean id="apple" class="com.springbook.biz.polymorphism.AppleSpeaker"></bean>
- SamsungTV
package com.springbook.biz.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;
}
// 중략
}
결과화면
- property태그로 인해 함수가 호출된것을 확인할수있다
Reference
- 스프링 퀵 스타트-채규태 지음