본문 바로가기

Spring

DI(Dependency Injection) 컬렉션 주입

인터넷 강의를 듣고 공부한 내용을 포스팅합니다.

'윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정' 이란 강의를 듣고 있습니다.

 

컬렉션 주입

bean을 정의할 때 주입해야 하는 값이 컬렉션인 경우 컬렉션이 객체를 초기에 설정할 수 있습니다.

이 포스팅에서는 List,Map,Set,Property를 알아보겠습니다.

 

실습

방식은 다른 주입과 흡사합니다. 빠르게 보시죠

 

List

<bean id="t1" class="kr.co.softcampus.beans.TestBean">
		<!-- 제네릭이 String List -->
		<property name="list1">
			<list>
				<value>문자열1</value>
				<value>문자열2</value>
				<value>문자열3</value>
			</list>
		</property>
		<!-- 제네릭이 Integer인 List -->
		<property name="list2">
			<list>
				<value type="int">100</value>
				<value type="int">200</value>
				<value type="int">300</value>
			</list>
		</property>
		<!-- 제네릭이 Class인 List -->
		<property name="list3">
			<list>
				<bean class="kr.co.softcampus.beans.DataBean"/>
				<bean class="kr.co.softcampus.beans.DataBean"/>
				<ref bean = "data_bean"/>
				<ref bean = "data_bean"/>
			</list>
		</property>
 </bean>
<bean id="data_bean" class="kr.co.softcampus.beans.DataBean" scope="prototype"/>

property태그를 사용하고 그 안에 내가 사용하는 콜렉션 태그를 넣어주고 값을 정의해주면 됩니다.

 

Set

<bean id="t1" class="kr.co.softcampus.beans.TestBean">
	
	<!-- 제네릭이 String Set -->
	<property name="set1">
		<set>
			<value>문자열1</value>
			<value>문자열2</value>
			<value>문자열3</value>
			<value>문자열3</value>
			<value>문자열3</value>

		</set>
	</property>
	<!-- 제네릭이 Integer인 Set -->
	<property name="set2">
		<set>
			<value type="int">100</value>
			<value type="int">200</value>
			<value type="int">300</value>
			<value type="int">300</value>
			<value type="int">300</value>

		</set>
	</property>
	<!-- 제네릭이 Class인 Set -->
	<property name="set3">
		<set>
			<bean class="kr.co.softcampus.beans.DataBean"/>
			<bean class="kr.co.softcampus.beans.DataBean"/>
			<ref bean = "data_bean"/>
			<ref bean = "data_bean"/>
		</set>
	</property>
</bean>
	
<bean id="data_bean" class="kr.co.softcampus.beans.DataBean" scope="prototype"/>

List와 거의 흡사하지만 한가지 다른 점이 있습니다.

결과
set3 : kr.co.softcampus.beans.DataBean@34cd072c
set3 : kr.co.softcampus.beans.DataBean@7a1ebcd8
set3 : kr.co.softcampus.beans.DataBean@5faeada1

위의 결과는 제네릭이 class인 경우의 결과입니다. bean객체를 직접 생성하여 주입한 위의 두개는 잘 들어갔는데 밑에

밖에다가 따로 bean객체를 생성하고 넣어준 건 하나만 들어갔습니다. set에서는 따로 객체를 생성하길 원한다면 bean객체를 직접 넣어주어야 합니다.

 

Map

	<bean id="t1" class="kr.co.softcampus.beans.TestBean">
		
		<!-- map -->
		<property name="map1">
			<map>
				
				<entry key="a1" value="문자열"/>
				<entry key="a2" value="100" value-type="int"/>
				<entry key="a3">
					<bean class="kr.co.softcampus.beans.DataBean"/>
				</entry>
				<entry key="a4" value-ref="data_bean"/>
				<entry key="a5">
					<list>
						<value>문자열1</value>
						<value>문자열2</value>
						<value>문자열3</value>
					</list>
				</entry>
			</map>
		</property>
	</bean>			
	
	<bean id="data_bean" class="kr.co.softcampus.beans.DataBean" scope="prototype"/>

TestBean에 정의되어져 있는 map은 key는 String이고 value는 object입니다.

entry태그 안에 key와 value모두 정의해 줍니다.

property

이 강의 들으면서 처음 알았습니다..

Map과 비슷하게 동작을 한다고 합니다.

	<bean id="t1" class="kr.co.softcampus.beans.TestBean">
		<!-- property -->
		<property name="prop1">
			<props>
				<prop key="p1">문자열1</prop>
				<prop key="p2">문자열2</prop>
				<prop key="p3">문자열3</prop>
			</props>
		</property>
	</bean>

 

끝!