SW/Java

Java : Spring : bean 컬렉션 주입 : 개념, 예제, 구현

얇은생각 2020. 6. 10. 07:30
반응형

컬렉션 주입

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

주로, List, Map, Set Property를 사용하도록 합니다.

 

 

beans.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='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>
		<!-- 제네릭이 DataBean인 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>
		<!-- 제네릭이 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>
		<!-- 제네릭이 DataBean인 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"/>
				<ref bean="data_bean"/>
				<ref bean="data_bean"/>
			</set>
		</property>
		
		<!-- 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>
		
		<!-- property -->
		<property name="prop1">
			<props>
				<prop key="p1">문자열1</prop>
				<prop key="p2">문자열2</prop>
				<prop key="p3">문자열3</prop>
			</props>
		</property>
	</bean>
	
	<bean id='data_bean' class='kr.co.softcampus.beans.DataBean' scope='prototype'/>
</beans>

 

 

DataBean.java

package kr.co.softcampus.beans;

public class DataBean {

}

 

TestBean.java

package kr.co.softcampus.beans;

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

public class TestBean {
	
	private List<String> list1;
	private List<Integer> list2;
	private List<DataBean> list3;
	
	private Set<String> set1;
	private Set<Integer> set2;
	private Set<DataBean> set3;
	
	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> getSet1() {
		return set1;
	}

	public void setSet1(Set<String> set1) {
		this.set1 = set1;
	}

	public Set<Integer> getSet2() {
		return set2;
	}

	public void setSet2(Set<Integer> set2) {
		this.set2 = set2;
	}

	public Set<DataBean> getSet3() {
		return set3;
	}

	public void setSet3(Set<DataBean> set3) {
		this.set3 = set3;
	}

	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;
	}
	
	
	
	
}

 

MainClass.java

package kr.co.softcampus.main;

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

import org.springframework.context.support.ClassPathXmlApplicationContext;

import kr.co.softcampus.beans.DataBean;
import kr.co.softcampus.beans.TestBean;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("kr/co/softcampus/config/beans.xml");
		
		TestBean t1 = ctx.getBean("t1", TestBean.class);
		
		List<String> list1 = t1.getList1();
		for(String str : list1) {
			System.out.printf("list1 : %s\n", str);
		}
		
		List<Integer> list2 = t1.getList2();
		for(int value : list2) {
			System.out.printf("list2 : %d\n", value);
		}
		
		List<DataBean> list3 = t1.getList3();
		for(DataBean obj : list3) {
			System.out.printf("list3 : %s\n", obj);
		}
		
		System.out.println("-----------------------------------");
		
		Set<String> set1 = t1.getSet1();
		Set<Integer> set2 = t1.getSet2();
		Set<DataBean> set3 = t1.getSet3();
		
		for(String str : set1) {
			System.out.printf("set1 : %s\n", str);
		}
		
		for(int value : set2) {
			System.out.printf("set2 : %d\n", value);
		}
		
		for(DataBean obj : set3) {
			System.out.printf("set3 : %s\n", obj);
		}
		
		System.out.println("-------------------------------");
		
		Map<String, Object> map1 = t1.getMap1();
		
		String a1 = (String)map1.get("a1");
		int a2 = (Integer)map1.get("a2");
		DataBean a3 = (DataBean)map1.get("a3");
		DataBean a4 = (DataBean)map1.get("a4");
		List<String> a5 = (List<String>)map1.get("a5");
		
		System.out.printf("a1 : %s\n", a1);
		System.out.printf("a2 : %d\n", a2);
		System.out.printf("a3 : %s\n", a3);
		System.out.printf("a4 : %s\n", a4);
		
		for(String str : a5) {
			System.out.printf("a5 : %s\n", str);
		}
		
		System.out.println("---------------------------------");
		
		Properties prop1 = t1.getProp1();
		
		String p1 = prop1.getProperty("p1");
		String p2 = prop1.getProperty("p2");
		String p3 = prop1.getProperty("p3");
		
		System.out.printf("p1 : %s\n", p1);
		System.out.printf("p2 : %s\n", p2);
		System.out.printf("p3 : %s\n", p3);
		
		ctx.close();
	}

}

 

이번 시간에는 컬렉션 객체에 의존성 주입하는 실습을 진행해 보았습니다. 해당 빈 객체를 생성할 떄 주입할 멤버가 컬렉션이라면, 위와 같은 방식으로 진행할 수 있다는 것을 알게 되었습니다. 컬렉션에 다양한 의존성을 주입해서 활용해야하는 경우 위 방식을 참조하도록 해야겠습니다. 좀 더 구체적인 예제 설명은 아래 강의에서 확인해볼 수 있습니다. 좋은 예제와 친절한 설명으로 다시 개념을 잘 잡을 수 있었습니다.

 

https://www.udemy.com/course/sooftcampus-sfb/

 

초보 Spring Framework 개발자를 위한 실습을 통한 입문 과정 윤재성

Spring Framework 입문을 위한 주제별 실습 및 상세 설명( beginner step1)

www.udemy.com

반응형