JAKARTAPROJECT
JAKARTA TIPJSP TIPJSP 질문&답변DATABASE TIPJAVASCRIPT TIPWEBHACKING TIP기타 TIP
JSP 팁
JSP 팁
JSP 팁 게시판 입니다
Spring 빈묶기-세터메소드를 통한 의존성 주입
kaiser
이미지 슬라이더 보기
 

세터 메소드라는 것은 자바빈에서 사용하는 것을 말한다. 예를 들어 빈의 속성으로 maxStudents 존재하면 다음과 같은 getter setter 메소드가 된다.

 

public void setMaxStudents(int maxStudents){

this.maxStudents = maxStudents;

}

 

public void getMaxStudents(int maxStudents){

return  maxStudents;

}

 

<bean> 하위요소인 <property> 바로 셋터 메소드를 통해 빈의 속성에 값을 셋팅(주입)하는 수단이 된다. 설정하고자 하는 속성과 속성에 셋팅하고자하는 값을 아래와 같이 표현할 있다.

 

<bean id = "foo" class = "com.springinaction.Foo">

<property name = "maxStudents"><value>30</value>

</property>

</bean>

 

단순한 설정

 

빈이 int String 같은 단순한 타입의 속성을 갖는데 , 원시 자료형(primitive type) 부터 집합(collection) , 심지어는 애플리케이션 내의 다른 빈까지 어떤것이든 주입할 있다.

 

원시 자료형 : byte, char, int , long, doube 등과 같은 기본적으로 제공되는 데이터 타입

집합 : ArrayList, HashSet, Vector 등과 같은 컬렉션 계열, HashMap, Hashtable, TreeMap 등과 같은 계열, 배열등 자바 API에서 제공되는 데이터 타입

 

근데 눈치 빠른 사람이라면 위의 최대학생수를 셋팅하는데 있어, 30이라는 것을 int 또는 String으로 할수 있다. 어느것일까…

답은 spring 컨테이너에서 설정될 속성의 타입을 자동으로 판단해 값을 적절하게 변환시켜준다.

 

다른 참조하기

 

<property> 요소를 사용하여 다른 빈을 참조하는 특성을 설정할 있는데, 다음과 같다.

 

<bean id = "foo" class = "com.springinaction.Foo">

<property name = "bar">

<ref>30</value>

</property>

</bean>

 

 

내부빈

 

자주 사용되지는 않지만 빈의 참조를 엮는 다른 수단으로서, <property> 요소에 직접 <bean> 요소를 끼워 넣는 방법이 있다.

 

<bean id = "courseService" class= "com.springinaction.service.training.CourseServiceImpl">

<property name = "studentService">

<bean class="com.springinaction.service.training.StudentServiceImpl"/>

</property>

</bean>

 

이와 같이 빈의 참조를 묶는 방법의 단점은 StudentServiceImpl 인스턴스가 다른곳에서 재사용되지 못하는다는 점이다. StudentServiceImpl 클래스는 courseService빈에 의해서만 사용될 목적으로 특별히 생성되었다고 봐야 한다. 물론 가독성도 떨어진다.

이런 경우는 AOP 프록시를 만들때 BeanFactory에서 대상 빈을 직접 접근하지 못하게 하고 싶은 경우 해당될것이다.

 

객체 집합 묶기

 

Spring 속성이 Set 이거나 List 등의 지원한다.

 

Xml

타입

<list>

Java.util.List, 배열

<set>

Java.util.Set

<map>

Java.util.Map

<props>

Java.util.Properties

 

리스트나 배열 묶기

 

<property name = "barList">

<list>

<value>bar1</value>

<ref bean = "bar2"/>

</list>

</property>

 

나중에 spring 트레이닝 애플리케이션에서 하이버네이트를 사용하여 객체를 영속시키는 방법을 보게될것이다. 그러나 <list> 사용하여 List 속성을 묶는  예를 보여주기 위해 보면, spring 하이버네이트를 사용할 때에는 LocalSessionFactoryBean이라는 빈을 컨테이너 안에 묶게 된다.

LocalSessionFactoryBean mappingResources라는 특성을 갖는데, 특성은 하이버네이트 매핑 파일의 이름들을 담는 String List 취한다. 다음은 하이버네이트에 대해 얘기할때 소개하게 묶기 파일의 xml 코드의 일부이다.

 

<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

<property name="mappingResource">

<list>

<value>/com/springinaction/training/model/Course.hbm.xml</value>

<value>/com/springinaction/training/model/Student.hbm.xml</value>

</list>

</property>

 

 

</bean>

 

<list>안에는 <value> 사용하는 것이 아니다. <ref>, <list> 같은 다른 집합을 포함하여, 단일 속성에서 유효한 어떤 요소라도 사용할 있다.

 

Set 묶기

 

빈의 집합내에서의 유일성을 보장하는 java.util.Set 속성은 아래와 같이 사용한다.

<property name = "barSet">

<set>

<value>bar1</value>

<ref bean = "bar2"/>

</set>

</property>

 

 

묶기

 

Java.util.Map 키값과 그에 해당하는 값을 가지는 구조이며 아래와 같이 사용한다.

 

<property name = "barMap">

<map>

<entry key="key1">

<value>bar1</value>

</entry>

<entry key="key2">

<ref bean = "bar2"/>

</entry>

</map>

</property>

 

주의할점은 <entry> 묶을때, key 속성이 String이다.

 

 

속성 묶기

 

Java.util.Proerties 해당하는 집합 유형이다. 맵과 차이점은 String 형만 가능하다

<property name = "barProps">

<props>

<prop key="key1">bar1</prop>

<prop key="key2">bar2</prop>

</props>

</property>

 

Null 설정

 

빈의 속성값이 null 지정할 때는 아래와 같이 하면 된다.

 

<property name="foo"><null/></proerty>

 

Spring에서는 명시적으로 속성을 묶지 않으면, 속성을 null이라 생각할 있다. 하지만 항상 그렇지 않다는 것이다. 우선 자신이 속성을 생성자에 의해 값이 셋팅 될수 있으며, 나중에 보게될 자동묶기(autowiring) 사용하는 경우에는 속성이 내부적으로 묶일 있다. 그래서 명시적으로 null 하고 싶을때 사용한다.

 

세터 주입의 대안

 

세터 주입의 단점은 빈의 속성이 언제든지 세터에 의해서 변경될 가능성이 있다는 것이다.

예를 들어 어떤 속성은 빈이 생성될때 한번만 설정되고 이후에는 변경될 없도록 하고싶은 경우이다.

한가지 대안은 속성을 생성자를 통해 설정될 있도록 빈을 설계하는 것이다.

2007-08-06 11:42:01
211.189.124.***

서현사랑~ 안녕 안녕 나의 아기별~~

0점 (0명)
덧글 0개 | 태그 1개 | 관련글보기
태그입력
쉽표(,)구분으로 한번에 여러 태그를 입력할수 있습니다
spring (18)
이름 비밀번호
JSP 팁
JSP 팁 게시판 입니다
! 번호 제목 글쓴이 일자 조회
114 STS Spring MVC on STS 2.8, 2.9 버전에서 프로젝트 생성시 에러발생 할 경우 1 GoodBug 2012-03-08 8,029
113 dbcp DBCP 사용시 DB정보 암호화 1 GoodBug 2012-02-08 5,538
112 스트럿츠 action alert 메시지 출력 후 페이지 이동 & 뒤로가기 예방 행복한광대 2009-01-14 11,588
111 spring spring 자동묶기 1 kaiser 2007-03-12 11,799
110 spring Spring 빈묶기- 생성자를 통한 의존성 주입 2 1 kaiser 2007-02-21 21,565
spring Spring 빈묶기-세터메소드를 통한 의존성 주입 1 kaiser 2007-02-21 11,866
108 spring Spring - xml로 묶기 1 kaiser 2007-02-07 12,344
107 spring Spring 빈묶기-기본묶기 1 kaiser 2007-02-05 8,765
106 spring spring 빈묶기-2 1 kaiser 2007-01-29 9,628
105 spring Spring 빈묶기-1 1 kaiser 2007-01-29 9,706
104 spring Spring 1차 요약 1 kaiser 2007-01-23 10,768
103 spring spring 시작하기-2 1 1 kaiser 2007-01-22 9,931
102 spring Spring 시작하기-1 4 1 kaiser 2007-01-22 11,637
101 spring Spring 서론 - spring 설치 1 1 kaiser 2007-01-19 13,314
100 clob 사용하기 kaiser 2008-08-21 7,632
99 span 글쓰기 후 사용할 protoload 1 1 고고싱 2008-05-09 7,120
98 log4sql log4sql 1 1 Aki 2008-04-30 8,352
97 숫자 세자리마다 콤마 찍기 1 곱슬대마왕 2008-03-21 8,463
96 iBatis iBatis 에서 SQL 로깅시 이뿌게 보이기 6 1 GoodBug 2007-10-26 22,565
95 log4sql요즘 많이 쓰는것 같던데.... 영이남푠 2008-10-17 8,078
copyright 2005-2018 by Unicorn