이번 시간에는 콜렉션을 생성하는 방법과 콜렉션에 객체를 참조시키는 초기화 작업을 어떻게 DI 할 것인지를 다루어본다.
우선 콜렉션이라 하면 ArrayList가 대표적이며, 아래와 같이 생성할 수 있다.
List<Exam> exams = new ArrayList<>();
exams.add(new NewlecExam(10, 20, 30, 40));
for(Exam e : exams)
System.out.println(e);
이제 위의 코드를 xml을 통해 생성하고 값을 초기화 해보자.
우선 코드를 아래와 같이 수정해주었다.
List<Exam> exams = (List<Exam>) context.getBean("exams");
exams.add(new NewlecExam(10, 20, 30, 40));
for(Exam e : exams)
System.out.println(e);
이후 xml 파일에 코드를 추가해준다.
<bean id="exams" class="java.util.ArrayList"/>
이후 실행해보면 결과가 잘 출력되는 것을 확인할 수 있다.
이번에는 객체를 xml에서 생성한 뒤 해당 객체를 바로 초기화하는 방법에 대해 알아보자.
일단 ArrayList의 add 함수는 setter가 아니므로 <property> 태그를 사용할 수 없다. 따라서 다른 방법을 찾아야 하는데, ArrayList는 객체를 생성할 때 Collection을 대입할 수 있도록 하는 생성자를 가지고 있다.
따라서 Collection을 생성자에 대입하는 방식으로 객체를 추가할 수 있으며, xml 파일에 아래의 구문을 추가해줄 수 있다.
<bean id="exams" class="java.util.ArrayList">
<constructor-arg>
<list>
<bean class="spring.di.entity.NewlecExam" p:kor="10" p:eng="20" p:math="40" p:com="30"/>
<ref bean="exam"/>
</list>
</constructor-arg>
</bean>
생성자에 대입되는 매개변수가 Collection이므로 <list> 태그를 이용하였으며, 해당 태그 안에 초기화 하고자 하는 객체를 추가해줄 수 있다.
여기서 <ref> 태그를 이용해 객체를 새로 만들지 않고, 이전에 만들었던 객체를 가져와서 쓸 수 있다.
이렇게 하면 java 파일에서 따로 항목을 추가하지 않아도 xml에서 추가된 객체가 출력되는 것을 확인할 수 있다.
List<Exam> exams = (List<Exam>) context.getBean("exams");
//exams.add(new NewlecExam(10, 20, 30, 40));
for(Exam e : exams)
System.out.println(e);
그렇다면 위처럼 하지않고 Collection 객체를 개별적으로 생성한 뒤, 추가할 수는 없을까? 결론부터 말하자면 가능하다. 다만 별도의 namespace를 추가해주어야 한다.
우선 Namespaces 탭으로 가서 util을 체크해준다.
이후 Source 탭으로 돌아가면 namespace가 추가된 것을 확인할 수 있다.
이제 xml 코드를 다음과 같이 수정해줄 수 있다.
...
<util:list id="exams" list-class="java.util.ArrayList">
<bean class="spring.di.entity.NewlecExam" p:kor="10" p:eng="20" p:math="40" p:com="30"/>
<ref bean="exam"/>
</util:list>
<!-- <bean id="exams" class="java.util.ArrayList">
<constructor-arg>
<list>
<bean class="spring.di.entity.NewlecExam" p:kor="10" p:eng="20" p:math="40" p:com="30"/>
<ref bean="exam"/>
</list>
</constructor-arg>
</bean> -->
...
<util:list> 태그는 실질적으로 객체를 생성해줄 수 있으며, id 속성과 어떤 종류의 리스트인지를 알려주는 list-class 속성을 가져야한다.
이후 java 파일로 돌아가 실행해보면 역시 정상적으로 결과가 출력되는 것을 확인할 수 있다.
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 6. XML Configuration을 Java Configuration으로 변경하기 (0) | 2022.04.11 |
---|---|
[Java / Spring] 5. 어노테이션을 이용한 객체 생성 (0) | 2022.04.11 |
[Java / Spring] 4. 어노테이션을 이용할 때의 장점과 @Autowired를 이용한 DI 해보기 (0) | 2022.04.11 |
[Java / Spring] 2. DI 값 설정 (0) | 2022.04.11 |
[JAVA / Spring] 1. 스프링을 통해 DI 설정 (0) | 2022.04.10 |