교재 실습/자바 웹 개발 워크북

137. 생성자와 프로퍼티 설정 (3)

Jint 2022. 10. 21. 23:40

3. <bean>의 속성을 이용하여 생성자 및 프로퍼티 설정하기

스프링은 <property> 태그를 사용하지 않고 프로퍼티 값을 설정하는 방법을 제공한다. 또한 <constructor-arg> 태그를 사용하는 대신 더 간단히 생성자의 매개변수 값을 설정하는 방법도 제공한다. <bean> 태그의 속성을 통해 프로퍼티나 생성자의 매개변수 값을 설정하는 방법이다. 실습을 통해 자세히 알아본다.

 

- 실습 패키지 생성

exam 패키지 아래에 test06 패키지를 생성한다. test05 패키지의 모든 파일을 test06 패키지에 복사한다.

 

- beans.xml 빈 설정 파일

exam/test06/beans.xml 파일을 열고 다음과 같이 편집한다.

<?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"
    xmlns:c="http://www.springframework.org/schema/c"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="score1" class="exam.test06.Score" p:name="홍길동" p:kor="100" p:eng="95" p:math="90"/>
	<bean id="score2" class="exam.test06.Score" c:name="임꺽정" c:kor="80" c:eng="90" c:math="100"/>

</beans>
xmlns:p="http://www.springframework.org/schema/p"

<bean> 태그의 속성을 통해 프로퍼티 값을 설정하려면, 먼저 <beans> 시작 태그에 이를 위한 네임스페이스 "http://www.springframework.org/schema/p"를 선언한다. 네임스페이스의 별명으로 프로퍼티를 의미하는 'p'를 사용한다. 'p' 네임스페이스를 사용하는 방법은 간단하다. 다음 그림과 같이 'p:프로퍼티명=값' 형식으로 선언하면 된다(그림 1).

그림 1 ('p' 네임스페이스의 사용법)

물론 'p'는 별명이기 때문에 다른 문자로 바꿀 수 있다.

<bean id="score1" class="exam.test06.Score" p:name="홍길동" p:kor="100" p:eng="95" p:math="90"/>
▶ 자바 코드로 표현하면?
Score score1 = new Score();
score1.setName("홍길동");
score1.setKor(100);
score1.setEng(95);
score1.setMath(90);

name 프로퍼티의 값을 설정하고 싶으면 앞의 코드와 같이 <bean> 태그에 p:name 속성을 추가한다. kor, eng, math 프로퍼티도 마찬가지로 p:kor, p:eng, p:math 속성을 선언하여 값을 설정한다.

xmlns:c="http://www.springframework.org/schema/c"

생성자도 프로퍼티처럼 <bean> 태그의 속성으로 매개변수 값을 설정할 수 있다. 먼저 위 코드와 같이 'c' 네임스페이스를 선언한다. 네임스페이스 별명인 'c'는 생성자(constructor)를 의미한다. 물론 네임스페이스 별명 'c'를 다른 문자로 변경할 수 있다.

<bean id="score2" class="exam.test06.Score" c:name="임꺽정" c:kor="80" c:eng="90" c:math="100"/>
▶ 자바 코드로 표현하면?
Score score2 = new Score("임꺽정", 100, 95, 90);

'c' 네임스페이스의 사용법은 'p' 사용법과 같다. 'c:매개변수명=값' 형식으로 선언한다. 다음 그림을 확인한다(그림 2).

그림 2 ('c' 네임스페이스의 사용법)

 

- 빈 컨테이너 테스트

빈 컨테이너의 동작을 테스트할 exam.test06.Test 클래스를 다음과 같이 편집한다.

package exam.test06;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	
	public static void main(String[] args) {
		//IoC 컨테이너 준비하여 빈 생성
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("exam/test06/beans.xml");
		
		Score score1 = (Score)ctx.getBean("score1");
		System.out.println(score1);

		Score score2 = (Score)ctx.getBean("score2");
		System.out.println(score2);
	}
	
}

테스트 코드는 test05 패키지의 것과 같다. 출력 결과를 보면 프로퍼티나 생성자에 설정한 값이 정확히 적용된 것을 확인할 수 있다.

그림 3 (exam.test06.Test 클래스 실행 결과)

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr