Back-End/Spring

[Spring] Collection Bean 생성하기 - XML Config

유자맛바나나 2021. 12. 14. 23:46

 

 ArrayList의 생성자를 이용한 Collection Bean 생성

1) ArrayList의 생성자 살펴보기

ArrayList는 Collection을 받을 수 있는 생성자가 있다. 따라서 Spring Bean을 등록할 때 ArrayList 클래스를 type으로 이용해 Collection Bean을 생성한다.

Collection을 받도록 정의된 ArrayList 생성자

 

2) SpringConfig.xml: DI지시서 작성하기

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
    // Case1. ArrayList 내부에 bean 직접 정의
    <bean id="calculators" class="java.util.ArrayList"> // ArrayList를 타입으로 사용
        <constructor-arg>
            <list>
                <bean id="calculatorBean" class="com.test.di.SalesCalculator" p:apple="10" p:banana="20" p:citron="30" />
            </list>
        </constructor-arg>
    </bean>
    
    // Case2. 외부에 정의한 bean을 참조
    <bean id="calculatorBean" class="com.test.di.SalesCalculator" p:apple="10" p:banana="20" p:citron="30" />

    <bean id="calculators" class="java.util.ArrayList"> // ArrayList를 타입으로 사용
        <constructor-arg>
            <list>
                <ref bean="calculatorBean"/>
            </list>
        </constructor-arg>
    </bean>

</beans>

 

  • 태그 설명
    1. <bean id="calculators" class="java.util.ArrayList">
      ArrayList 타입의 객체를 Bean을 생성한다.
    2. <constructor-arg>, <list>
      생성자로 Collection을 받을 수 있으므로, 생성자 DI임을 알리는 <constructor-arg> 태그와 Collection <list> 태그를 사용한다
  • Case1과 Case2의 차이
    • Case1: 컬렉션에 들어갈 bean을 <list> 태그 내에 직접 정의
    • Case2: bean을 외부에 정의한 후 <ref> 태그를 이용해 참조

 

3) Client Code

public void client() {
    ApplicationContext context = new ClassPathXmlApplicationContext("./SpringConfig.xml");

    List<Calculator> calculators = (List<Calculator>) context.getBean("calculators");

    for (Calculator each : calculators) {
    	System.out.println(each);
    }
}