2020. 8. 17. 20:53ㆍJava/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에 주입이 된다.
위처럼 중복된 값이 있으면 중복을 제거하고 출력이 된다.
<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개만 출력된다.
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 객체를 생성할 때 주입할 맴버가 컬렉션라면 컬렉션이 관리할 객체를 주입할 수 있다.
'Java > Spring' 카테고리의 다른 글
Spring - Java를 이용한 Bean 등록(어노테이션) (0) | 2020.08.18 |
---|---|
Spring - 빈 객체 값 주입(자동주입) (0) | 2020.08.17 |
Spring - 빈 객체 값 주입 (Setter 메소드) (0) | 2020.08.17 |
Spring - 빈 객체 값 주입(생성자) (0) | 2020.08.17 |
Spring - BeanPostProcessor (0) | 2020.08.16 |