Spring - 빈 객체 값 주입(컬렉션)

2020. 8. 17. 20:53Java/Spring

반응형

 Bean을 정의할 때 주입해야 하는 맴버가 컬렉션인 경우 컬렉션이 관리할 객체를 초기에 설정할 수 있다.

 

 

새로운 클래스를 만들고 컬렉션을 정의한다.

 

List, Set,Map,Properties를 정의했고, 어떻게 값을 주입하는지 알아보자.

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class TestBean3 {
	private List<String> list1;
	private List<Integer> list2;
	private List<DataBean> list3;
	
	private Set<String> list4;
	private Set<Integer> list5;
	private Set<DataBean2> list6;
	
	private Map<String,Object> map1;
	
	private Properties prop1;
	
	
	public List<String> getList1() {
		return list1;
	}

	public void setList1(List<String> list1) {
		this.list1 = list1;
	}

	public List<Integer> getList2() {
		return list2;
	}

	public void setList2(List<Integer> list2) {
		this.list2 = list2;
	}

	public List<DataBean> getList3() {
		return list3;
	}

	public void setList3(List<DataBean> list3) {
		this.list3 = list3;
	}

	public Set<String> getList4() {
		return list4;
	}

	public void setList4(Set<String> list4) {
		this.list4 = list4;
	}

	public Set<Integer> getList5() {
		return list5;
	}

	public void setList5(Set<Integer> list5) {
		this.list5 = list5;
	}

	public Set<DataBean2> getList6() {
		return list6;
	}

	public void setList6(Set<DataBean2> list6) {
		this.list6 = list6;
	}

	public Map<String, Object> getMap1() {
		return map1;
	}

	public void setMap1(Map<String, Object> map1) {
		this.map1 = map1;
	}

	public Properties getProp1() {
		return prop1;
	}

	public void setProp1(Properties prop1) {
		this.prop1 = prop1;
	}

}

1.List

 

List는 다음과 같이 작성한다.

	
	<bean id="t10" class="kr.co.softcampus.beans.TestBean3">
		<property name="list1">
			<list>
				<value>list1</value>
				<value>list2</value>
				<value>list3</value>
			</list>
		</property>
	</bean>

Property 태그의 name 속성을 이용해 setter을 찾아서 정의하는데 List 값을 주입시 <list>캐그를 사용하고 <value> 태그로 값을 주입한다. 이때 값의 우선순위는 String -> 실수 -> 정수순 이므로 문자열(String List)이 아닐경우는

<bean id="t11" class="kr.co.softcampus.beans.TestBean3">
		<property name="list2">
			<list>
				<value type="int">1</value>
				<value type="int">2</value>
				<value type="int">3</value>
			</list>
		</property>
</bean>

다음과 같이 type을 자료형에 맞게 설정해준다.

<bean id="t12" class="kr.co.softcampus.beans.TestBean3">
		<property name="list3">
			<list>
				<bean  class="kr.co.softcampus.beans.DataBean"/>
				<bean  class="kr.co.softcampus.beans.DataBean"/>
				<bean  class="kr.co.softcampus.beans.DataBean"/>
			</list>
		</property>
</bean>

위와 같이 객체 주입도 가능하다.

<bean id="t13" class="kr.co.softcampus.beans.TestBean3">
		<property name="list3">
		<list>
			<ref bean="ListTest"/>
			<ref bean="ListTest"/>
			<ref bean="ListTest"/>
		</list>
		</property>
</bean>

<bean id="ListTest" class="kr.co.softcampus.beans.DataBean" scope="prototype"/>

ref 태그를 이용하여 id 값으로 객체를 얻을 수 있다.

 

 

2.Set

Set은 기본적으로 중복을 허용하지 않은 컬렉션이다.

<bean id="t14" class="kr.co.softcampus.beans.TestBean3">
		<property name="list4">
		<set>
			<value>list1</value>
			<value>list2</value>
			<value>list3</value>
			<value>list3</value>
			<value>list3</value>
			<value>list3</value>
		</set>
		</property>
</bean>

위와 같이 List 태그 대신 set 태그로 감싸면 set에 주입이 된다.

위처럼 중복된 값이 있으면 중복을 제거하고 출력이 된다.

Set 출력결과

<bean id="t16" class="kr.co.softcampus.beans.TestBean3">
		<property name="list6">
		<set>
			<bean class="kr.co.softcampus.beans.DataBean2"/>
			<bean class="kr.co.softcampus.beans.DataBean2"/>
			<bean class="kr.co.softcampus.beans.DataBean2"/>
			<ref bean="ListTest2"/>
			<ref bean="ListTest2"/>
			<ref bean="ListTest2"/>
		</set>
		</property>
</bean>


<bean id="ListTest2" class="kr.co.softcampus.beans.DataBean2"  lazy-init="true" scope="prototype"/>

객체의 주입은 직접 주입한 객체는 중복으로 인정이 안되고, id 값으로 참조로 가져온 객체는 중복으로 인식되어 1개만 출력된다.

객체 주입의 Set : 4개만 출력된다. 

 

3. Map

<bean id="t17" class="kr.co.softcampus.beans.TestBean3">
		<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.DataBean2"/>
			</entry>
			<entry key="a4">
				<list>
					<value>list1</value>
					<value>list2</value>
					<value>list3</value>
				</list>
			</entry>
		</map>
		</property>	
</bean>

Map은 <entry> 태그를 이용한다.

key,value 속성을 이용하여 키와 주입 값을 정해준다.

 

4.Properties

<property name="prop1">
	<props>
		<prop key="p1">문자1</prop>
		<prop key="p2">문자2</prop>
		<prop key="p3">문자3</prop>
	</props>
</property>

Properties는 props 태그로 작성한다.

prop 태그의 key 속성을 선언하여 해당키에 값을 넣어준다.

 

 

위에 선언된 빈 객체를 가져오는 MainClass와 그 결과이다.

public class MainClass {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("kr/co/softcampus/config/beans.xml");
		
		TestBean3 t10 = ctx.getBean("t10",TestBean3.class);
		for(String s:t10.getList1()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t11 = ctx.getBean("t11",TestBean3.class);
		for(int s:t11.getList2()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t12 = ctx.getBean("t12",TestBean3.class);
		for(Object s:t12.getList3()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t13 = ctx.getBean("t13",TestBean3.class);
		for(Object s:t13.getList3()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t14 = ctx.getBean("t14",TestBean3.class);
		for(Object s:t14.getList4()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t15 = ctx.getBean("t15",TestBean3.class);
		for(Object s:t15.getList6()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t16 = ctx.getBean("t16",TestBean3.class);
		for(DataBean2 s:t16.getList6()) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		TestBean3 t17 = ctx.getBean("t17",TestBean3.class);
		Map<String,Object> map1 = t17.getMap1();
		
		String a1 = (String) map1.get("a1");
		int a2 = (Integer) map1.get("a2");
		DataBean2 a3 = (DataBean2) map1.get("a3");
		List a4 = (List) map1.get("a4");
		
		System.out.println(a1+",   "+a2+" ,  "+a3);
		for(Object s:a4) {
			System.out.println(s);
		}
		System.out.println("===============================================");
		Properties p1 = t17.getProp1();
		String g = p1.getProperty("p1");
		String g2 = p1.getProperty("p2");
		String g3 = p1.getProperty("p3");
		System.out.println(g+g2+g3);
		ctx.close();

	}

}

.

.

.

Bean 객체를 생성할 때 주입할 맴버가 컬렉션라면 컬렉션이 관리할 객체를 주입할 수 있다.

반응형