티스토리 뷰

포스팅에 앞서...

이 포스팅은 Spring Framework 를 이용한 Java 코드 위주의 설명입니다.

 

관련 코드는 아래 링크를 통해 깃허브에서 받아보실 수 있습니다.

 

https://github.com/ChoHyeonJunn/Workspace_Spring

 

ChoHyeonJunn/Workspace_Spring

Contribute to ChoHyeonJunn/Workspace_Spring development by creating an account on GitHub.

github.com


Spring04 프로젝트에 com.test01 패키지에서부터 testCode 를 진행하겠습니다.

 

실습의 주요 내용은 클래스의 구성에 따라 applicationContext.xml (IoC Container) 를 작성하고 main 메서드에서 이를 사용하는 방법에 대한 내용입니다.

 

http://www.springframework.org/schema/beans/spring-beans.xsd

불러오는 중입니다...

다루게 될 주요 내용


TestCode

 

1. <Spring04 - com.test01 package>

com.test01 패키지의 클래스 구성도입니다.

 

이번 실습은 객체 호출 및 Collection 사용이 주 내용이기 때문에 클래스 구성도에 집중할 필요는 없습니다.

 

package com.test01;

import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class BeanTest {

	private MyClass myClass;

	public BeanTest() {
		System.out.println("기본 생성자()");
	}

	public BeanTest(Date date) {
		System.out.println("파라미터 1개 생성자(Date date) : " + date);
	}

	public void setMyClass(MyClass myClass) {
		this.myClass = myClass;
		System.out.println("setMyClass(MyClass myClass) 호출!");
	}

	public void setDate(Date date) {
		System.out.println("setDate(Date date) 호출 : " + date);
	}
	
	public void setNumber(int i) {
		System.out.println("setNumber(int i) 호출 : " + i);
	}
	
	public void setArray(String[] arr) {
		System.out.println("setArray(String[] arr) 호출 : ");
		for(String str : arr) {
			System.out.println(str);
		}
	}
	
	public void setList(List<String> list) {
		System.out.println("setList(List<String> list) 호출 : ");
		for(String str : list) {
			System.out.println(str);
		}
	}
	
	public void setMyset(Set<String> set) {
		System.out.println("setMyset(Set<String> set) 호출 : ");
		for(String str : set) {
			System.out.println(str);
		}
	}
	
	public void setMap(Map<String, String> map) {
		System.out.println("setMap(Map<String, String> map) 호출 : ");
		Collection<String> values = map.values();
		for(String value : values) {
			System.out.println(value);
		}
	}
	
	public void setScore(List<Score> scoreList) {
		System.out.println("setScore(List<Score> score) 호출 : ");
		for(Score score : scoreList) {
			System.out.println(score);
		}
	}
}

 applicationContext.xml 을 통해 출력해 볼 클래스의 모습입니다.

 

setMyClass(MyClass myClass) 와 setScore(List<Score> scoreList) 는 파라미터로 객체가 들어갑니다.

각 객체는 다음과 같습니다.

package com.test01;

public class MyClass {
	public MyClass() {
		System.out.println("MyClass()");
	}
}
package com.test01;

public class Score {
	private String name;
	private int kor;
	private int eng;
	private int math;

	public Score() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Score(String name, int kor, int eng, int math) {
		super();
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

	@Override
	public String toString() {
		return "Score [name=" + name + ", kor=" + kor + ", eng=" + eng + ", math=" + math + "]";
	}

}

 

이제 applicationContext.xml 을 살펴보며 IoC Container 에서 컬렉션을 사용하는 방법을 보겠습니다.

<?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="myClass" class="com.test01.MyClass" lazy-init="true"></bean>


	<bean id="date" class="java.util.Date">
		<constructor-arg name="year" value="120"></constructor-arg>
		<constructor-arg name="month" value="11"></constructor-arg>
		<constructor-arg name="date" value="25"></constructor-arg>
	</bean>


	<bean id="beanTest" class="com.test01.BeanTest">

		<!-- 1. public BeanTest(Date date) 호출 : 2020.12.25 -->
		<constructor-arg ref="date"></constructor-arg>

		<!-- 2. setMyClass(MyClass myClass) 호출 -->
		<property name="myClass" ref="myClass"></property>

		<!-- 3. setDate(Date date) 호출 -->
		<property name="date">
			<!-- inner Bean -->
			<bean class="java.util.Date"></bean>
		</property>
		
		<!-- 4. setNumber(int i) 호출 -->
		<property name="number">
			<value type="short">100</value>
		</property>
		
		<!-- 5. setArray(String[] arr) 호출 -->
		<property name="array">			
			<array>
				<value>홍길동</value>
				<value>이순신</value>
				<value>왕건</value> 
			</array>	
		</property>

		<!-- 6. setList(List<String> list) 호출 -->
		<property name="list">
			<list>
				<value>봄</value>
				<value>여름</value>
				<value>가을</value>
				<value>겨울</value>
			</list>
		</property>
		
		<!-- 7. setMyset(Set<String> set) 호출 : 1,1,2,3,3 -->
		<property name="myset">
			<set>
				<value>1</value>
				<value>1</value>
				<value>2</value>
				<value>3</value>
				<value>3</value>
			</set>
		</property>
		
		<!-- 8. setMap(Map<String, String> map) 호출 : {1:봄},{2:여름},{3:가을},{4:겨울} -->
		<property name="map">
			<map>
				<entry key="1" value="봄"></entry>
				<entry key="2" value="여름"></entry>
				<entry>
					<key><value>3</value></key>
					<value>가을</value>
				</entry>
				<entry>
					<key><value>4</value></key>
					<value>겨울</value>
				</entry>
			</map>
		</property>
		
		<!-- 9. setScore(List<Score> scoreList) 호출 -->
		<property name="score">
			<list>
				<bean class="com.test01.Score">
					<property name="name" value="홍길동"></property>
					<property name="kor" value="99"></property>
					<property name="eng" value="98"></property>
					<property name="math" value="87"></property>
				</bean>
				<ref bean="lee"/>				
			</list>
		</property>
	</bean>
	
	<bean id="lee" class="com.test01.Score">
		<constructor-arg name="name" value="이순신"></constructor-arg>
		<constructor-arg name="kor" value="100"></constructor-arg>
		<constructor-arg name="eng" value="100"></constructor-arg>
		<constructor-arg name="math" value="100"></constructor-arg>
	</bean>
</beans>

 

1. public BeanTest(Date date) 호출 : 2020.12.25

<bean id="date" class="java.util.Date">
	<constructor-arg name="year" value="120"></constructor-arg>
	<constructor-arg name="month" value="11"></constructor-arg>
	<constructor-arg name="date" value="25"></constructor-arg>
</bean>

java.util.Date bean 객체를 만든것을 볼 수 있습니다. 1900 + 120 = 2020년 Month(0~11) 12월 / 25일 로 셋팅된 date 라는 이름의 객체를 ref속성으로 set

 

2. setMyClass(MyClass myClass) 호출

<bean id="myClass" class="com.test01.MyClass" lazy-init="true"></bean>

myClass 라는 이름으로 bean 객체를 생성했습니다. lazy-init="true" 속성이 있기 때문에 호출측에서 해당 객체를 생성하지 않으면 applicationContext.xml 안에서 객체가 자동으로 생성되지 않습니다.

 

3. setDate(Date date) 호출

innerBean 즉, property 안에 id가 없는 bean 태그를 기술해서 객체를 생성해 set 했습니다. date 객체 안에 특별한 요소 설정이 없기때문에 sysdate로 셋팅되어 들어갑니다.

 

4. setNumber(int i) 호출

property 태그 안에 value 태그를 기술해 값을 셋팅했습니다. value태그의 속성으로 type 을 지정해주었습니다. 작성된 데로 short 타입의 100 이 파라미터로 들어갑니다.

 

5. setArray(String[] arr) 호출

An array can contain multiple inner bean, ref, collection, or value elements. This configuration element will always result in an array, even when being defined e.g. as a value for a map with value type Object.

 

Spring-bean 에 나온 설명입니다. array안에는 inner bean, ref(생성된 bean 객체의 id로 호출), 컬렉션, value 가 들어갈 수 있습니다. 

 

코드에서는 array 태그안에 여러개의 value들을 기술해 값을 주입했습니다.

 

6. setList(List list) 호출

A list can contain multiple inner bean, ref, collection, or value elements. A list can also map to an array type; the necessary conversion is performed automatically.

 

7. setMyset(Set set) 호출 : 1,1,2,3,3

A set can contain multiple inner bean, ref, collection, or value elements.

 

set은 중복된 값이 들어갈 수 없기 때문에 결과는 1 2 3 으로 나옵니다. 이 외에 특별한 점은 없습니다.

 

8. setMap(Map<String, String> map) 호출 : {1:봄},{2:여름},{3:가을},{4:겨울}

A mapping from a key to an object. Maps may be empty.

<property name="map">
	<map>
		<entry key="1" value="봄"></entry>
		<entry key="2" value="여름"></entry>
		<entry>
			<key><value>3</value></key>
			<value>가을</value>
		</entry>
		<entry>
			<key><value>4</value></key>
			<value>겨울</value>
		</entry>
	</map>
</property>

map 요소 안에 entry 요소로 값을 주입했습니다. 

 

entry 요소의 속성 (key, value) 로 값을 주입하거나, entry 요소의 inner 요소 key, value 요소로 값을 주입했습니다.

 

9. setScore(List scoreList) 호출

<property name="score">
	<list>
		<bean class="com.test01.Score">
			<property name="name" value="홍길동"></property>
			<property name="kor" value="99"></property>
			<property name="eng" value="98"></property>
			<property name="math" value="87"></property>
		</bean>
		<ref bean="lee"/>				
	</list>
</property>

list Collection 이지만 값으로 객체를 주입했습니다. 

 

inner bean 으로 값을 주입하거나, ref로 applicationContext.xml 안에 정의된 bean 을 참조하여 값을 주입했습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함