티스토리 뷰

지난 포스팅에서도 한번 언급했듯, constructor-arg 태그를 이용하여 bean 객체에 인자를 전달할 수 있다.


1. value 속성: bean 객체에 다른 bean 객체가 아닌 다른 자료형의 데이터를 전달할 때 사용하는 속성 

2. ref 속성: bean 객체에 다른 bean 객체 자체를 전달할 때 사용하는 속성

3. index 속성: constructor-arg로 인자를 전달할 때,  그 순서를 명시하여 사용할 수 있게 해주는 속성

 

이번에도 그리 어려운 개념은 아니기 때문에 자세한 설명은 생략하겠다.

 

◎SonySpeaker.java

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.java

package polymorphism;

public class SamsungTV implements TV{
	
	SonySpeaker speaker = null;
	int price = 0;
	
	public SamsungTV(SonySpeaker speaker, int price){
		System.out.println("SonySpeaker --- 객체 생성");
		this.speaker = speaker;
		this.price = price;
	}
	
	public SamsungTV() {
		System.out.println("SamsungTV --- 객체 생성");
	}

	@Override
	public void powerOn() {
		System.out.println("SamsungTV --- 전원 켜기");
	}

	@Override
	public void powerOff() {
		System.out.println("SamsungTV --- 전원 끄기");
	}

	@Override
	public void volumeUp() {
		speaker.volumeUp();
		System.out.println(this.price);
	}

	@Override
	public void volumeDown() {
		speaker.volumeDown();
	}
	
}

 

◎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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id = "tv" class = "polymorphism.SamsungTV">
		<constructor-arg ref = "sony"></constructor-arg>
		<constructor-arg value = "1000"></constructor-arg>
	</bean>
	
	<bean id = "sony" class = "polymorphism.SonySpeaker"></bean>

</beans>

 

◎Main

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 Container 구동
		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
		
		// 2. Spring Container 로부터  필요한 bean객체를 요청
		TV tv = (TV)factory.getBean("tv");
		
		tv.powerOn();
		tv.powerOff();
		tv.volumeDown();
		tv.volumeUp();
		
		// 3. Spring Container 종료
		factory.close();
	}

}


constructor-arg 태그는 작성한 순서대로 인자가 전달되지만, index 속성을 사용하면, 그 순번을 정해줄 수 있다.

 

◎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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id = "tv" class = "polymorphism.SamsungTV">
   	 	<constructor-arg index = "1" value = "1000"></constructor-arg>
		<constructor-arg index = "0" ref = "sony"></constructor-arg>
	</bean>
	
	<bean id = "sony" class = "polymorphism.SonySpeaker"></bean>

</beans>

결과는 동일하다.

Comments