WebServer/Spring
[Spring] 컬렉션 의존성 주입
gangintheremark
2023. 9. 4. 15:55
728x90
태그 | 컬렉션 타입 |
---|---|
<list> | java.util.List 나 배열 |
<set> | java.util.Set |
<map> | java.util.Map |
<props> | java.util.Properties |
- 컬렉션 원소가 기본타입인 경우에는
<value>
태그 이용 - 컬렉션 원소가 객체인 경우에
<ref>
태그 이용
스프링에서 namespace를 이용해 컬렉션 타입의 프로퍼티를 설정할 때, 반드시 util
체크 필수
List 주입
순서 있고, 중복 허용
<!-- ① 기본 -->
<bean id="" class="">
<property name="">
<list>
<ref bean="" />
<ref bean="" />
...
</list>
</property>
</bean>
<!-- ② util namespace -->
<util:list id="xxx">
<ref bean="" />
<ref bean="" />
...
</util:list>
<bean id="" class="">
<property name="" ref="xxx" />
</bean>
💻 List 실습
- 자바코드 :
List<Cat> catList;
<bean id="c1" class="com.dto.Cat">
<property name="username" value="애옹이" />
<property name="age" value="2" />
</bean>
<bean id="c2" class="com.dto.Cat">
<property name="username" value="떼껄룩" />
<property name="age" value="1" />
</bean>
<!-- 기본 -->
<bean id="service" class="com.service.UserService">
<property name="catList">
<list>
<ref bean="c1" />
<ref bean="c2" />
<ref bean="c1" />
</list>
</property>
</bean>
<!-- util namespace -->
<util:list id="xxx">
<ref bean="c1" />
<ref bean="c2" />
<ref bean="c1" />
</util:list>
<bean id="service2" class="com.service.UserService">
<property name="catList" ref="xxx"></property>
</bean>

Set 주입
순서 없고, 중복 불가
<!-- ① 기본 -->
<bean id="" class="">
<property name="">
<set>
<ref bean="" />
<ref bean="" />
...
</set>
</property>
</bean>
<!-- ② util namespace -->
<util:set id="xxx">
<ref bean="" />
<ref bean="" />
...
</util:list>
<bean id="" class="">
<property name="" ref="xxx" />
</bean>
💻 Set 실습
- 자바코드 :
Set<Cat> catSet;
<!-- c1, c2 빈은 List에서 작성한 것과 동일 -->
<!-- 기본 -->
<bean id="service" class="com.service.UserService">
<property name="catSet">
<set>
<ref bean="c1" />
<ref bean="c2" />
<ref bean="c1" />
</set>
</property>
</bean>
<!-- util namespace -->
<util:set id="xxx">
<ref bean="c1" />
<ref bean="c2" />
<ref bean="c1" />
</util:set>
<bean id="service2" class="com.service.UserService">
<property name="catSet" ref="xxx" />
</bean>

Map 주입
key/vale 쌍으로 저장
<!-- ① 기본 -->
<bean id="" class="">
<property name="">
<map>
<entry key="" value-ref="" />
<entry key="">
<ref bean="">
</entry>
...
</map>
</property>
</bean>
<!-- ② util namespace -->
<util:map id="xxx">
<entry key="" value-ref="" />
<entry key="">
<ref bean="">
...
</entry>
</util:map>
<bean id="" class="">
<property name="" ref="xxx" />
</bean>
💻 Map 실습
- 자바코드 :
Map<Cat> catMap;
<!-- c1, c2 빈은 List에서 작성한 것과 동일 -->
<!-- 기본 -->
<bean id="service" class="com.service.UserService">
<property name="catSet">
<map>
<entry key="pet1" value-ref="c1" />
<entry key="pet2">
<ref bean="c2">
</entry>
</map>
</property>
</bean>
<!-- util namespace -->
<util:map id="xxx">
<entry key="pet01" value-ref="c1" />
<entry key="pet02">
<ref bean="c2">
</entry>
</util:map>
<bean id="service" class="com.service.UserService">
<property name="catMap" ref="xxx" />
</bean>
// 메인함수
public class UserMain {
public static void main(String[] args) {
// IoC Container 생성
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/config/user.xml");
// 빈 얻기
UserService service = ctx.getBean("service", UserService.class);
Map<String, Cat> m = service.getCatMap();
Set<String> keys = m.keySet();
for (String key : keys) {
System.out.println(key + "\t" + m.get(key));
}
}
}

props 주입
key/value 쌍으로 저장. 단, value값은 무조건 문자열 !!
<!-- ① 기본 -->
<bean id="" class="">
<property name="">
<props>
<prop key="키">문자열 값</prop>
...
</props>
</property>
</bean>
<!-- ② util namespace -->
<util:properties id="xxx">
<prop key="">문자열 값</prop>
...
</util:properties>
<bean id="" class="">
<property name="" ref="xxx" />
</bean>
💻 Properties 실습
- 자바코드 :
Properties phones;
<!-- 기본 -->
<bean id="service" class="com.service.UserService">
<property name="phones">
<props>
<prop key="phone1">01032145698</prop>
<prop key="phone2">01098765432</prop>
</props>
</property>
</bean>
<!-- util namespace -->
<util:properties id="xxx">
<prop key="phone1">01012345678</prop>
<prop key="phone2">01022223333</prop>
</util:properties>
<bean id="service2" class="com.service.UserService">
<property name="phones" ref="xxx"></property>
</bean>
// 메인함수
public class UserMain {
public static void main(String[] args) {
// IoC Container 생성
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/config/user.xml");
// 빈 얻기
UserService service = ctx.getBean("service", UserService.class);
Properties phones = service.getPhones();
Set<String> keys = phones.stringPropertyNames(); // map의 keySet()과 동일
for (String key : keys) {
System.out.println(key + "\t" + phones.getProperty(key)); // map의 get(key)과 동일
}
}
}

key-value 속성
Map
은 저장하는 value 값에 제한이 없다Properties
는 저장하는 value값이 무조건 문자열이다.
💡 Map의 key-value값 얻어오는 함수
Map<String, XXX> m = service.getXXX();
Set<String> keys = m.keySet();
m.get(key);
💡 Properties의 key-value값 얻어오는 함수
Properties p = service.getXXX();
Set<String> keys = p.stringPropertyNames();
p.getProperty(key);
728x90