객체간의 의존 관계는 생성자와 프로퍼티 설정의 2가지 방식으로 지정할 수 있다.
(1) 생성자 방식
JdbcDao.java
JdbcService.java
ExamMain.java
exam03.xml
결과
생성자를 통해 빈을 주입받는 경우는 <consturctor-arg>태그를 이용하여 처리한다.
빈(객체)를 주입(전달)받는 경우는 <consturctor-arg ref="..." />를 사용하며 기본 데이터 타입이나 String타입이라면 <consturctor-arg value="..." />를 사용한다. 즉 ref 대신 value를 사용한다.
또한, value로 전달된 값은 기본적으로 String 타입으로 처리한다.
<bean id="test" class="test.test.Test">
<constructor-arg>
<value>20</value>
</consturctor-arg>
</bean>
<bean id="test" class="test.test.Test">
<constructor-arg value="20" />
</consturctor-arg>
</bean>
<bean id="test" class="test.test.Test">
<constructor-arg value="20" />
</bean>
<bean id="test" class="test.test.Test">
<constructor-arg value="20" />
<constructor-arg ref="jdbcDao" />
<bean id="test" class="test.test.Test">
<constructor-arg value="20" />
<constructor-arg ref="jdbcDao" />
</bean>
<!-- <value>태그에 type 속성을 추가하면 직접 파라미터의 타입을 명시할 수도 있다. -->
<bean id="test" class="test.test.Test">
<constructor-arg>
<!-- <value>태그에 type 속성을 추가하면 직접 파라미터의 타입을 명시할 수도 있다. -->
<bean id="test" class="test.test.Test">
<constructor-arg>
<value type="long">2000</value>
</consturctor-arg>
</bean>
(2) 프로퍼티 설정 방식
=> 프로퍼티 설정 방식은 setXXX( ) 형태의 설정 메서드를 통해서 필요한 객체와 값을 전달받는 방식이다.
IbatisDao.java
IbatisService.java
ExamMain.java
exam04.xml
결과
빈(객체)을 주입받을 경우에는 <property name="..." ref="ibatis" /> 이런식으로 ref 태그을 쓰고 기본 데이터 타입 및 String 타입의 경우는 value 태그를 사용한다.
<bean id="test" class="test.test.Test">
<property name="exam01" value="10" />
<property name="exam02" ref="service" />
</bean>
/** 프로젝트를 하다보면...생성자 방식보다 거의 프로퍼티 설정 방법을 사용하게 된다. **/
(3) XML 네임스페이스를 이용한 프로퍼티 설정
=> XML 네임스페이스를 이용하면 <property> 태그를 사용하지 않고 간단한 방법으로 프로퍼티 설정을 할 수 있다.
exam04_01.xml
네임스페이스를 사용하기 위해 http://www.springframework.org/schema/p를 작성해 줌.
접두어를 "p"로 설정했으며 사용방법은 "p:프로퍼티이름" 속성을 사용하여 프로퍼티 값을 설정하고, "p:프로퍼터이름-ref="...""속성을 사용하여 bean 객체를 프로퍼티에 전달할 수 있다.
(4) 임의 빈 객체 전달
=> 보통 <constructor-arg>, <property> 태그를 사용하여 다른 빈 객체를 전달받게 되는데 식별 값을 갖지 않는 빈 객체를 생성하여 전달할 수도 있다.
JdbcDao.java
JdbcService.java
ExamMain.java
exam05.xml
결과
여기서 주의할 점은 임의빈 객체는 식별 값(id혹은 name)을 갖지 않기 때문에, 해당 객체를 재사용할 수 없다.
(위의 예제에서는 보여주기 위해 id="dao"라는 식별 값 설정 : 작성해도 에러는 아님)
기본적으로 식별 값이 없기 때문에 재사용할 수 없으며 또한 위 소스처럼 식별 값을 작성했다 하더라도 그 객체를 다른곳에서 재사용할 수는 없다.
=>결과 창을 보면 defining beans [service]이렇게 나와 있는것처럼 스프링 컨테어너는 service라는 식별 값의 bean만 생성했다는 것을 알 수 있다. 그렇기 때문에 id="dao"이런식으로 식별 값을 준다하더라도 "dao"라는 식별 값을 다른곳에서 사용할 수 없는 것이다.
</consturctor-arg>
</bean>
(2) 프로퍼티 설정 방식
=> 프로퍼티 설정 방식은 setXXX( ) 형태의 설정 메서드를 통해서 필요한 객체와 값을 전달받는 방식이다.
IbatisDao.java
IbatisService.java
ExamMain.java
exam04.xml
결과
빈(객체)을 주입받을 경우에는 <property name="..." ref="ibatis" /> 이런식으로 ref 태그을 쓰고 기본 데이터 타입 및 String 타입의 경우는 value 태그를 사용한다.
<bean id="test" class="test.test.Test">
<property name="exam01" value="10" />
<property name="exam02" ref="service" />
</bean>
/** 프로젝트를 하다보면...생성자 방식보다 거의 프로퍼티 설정 방법을 사용하게 된다. **/
(3) XML 네임스페이스를 이용한 프로퍼티 설정
=> XML 네임스페이스를 이용하면 <property> 태그를 사용하지 않고 간단한 방법으로 프로퍼티 설정을 할 수 있다.
exam04_01.xml
네임스페이스를 사용하기 위해 http://www.springframework.org/schema/p를 작성해 줌.
접두어를 "p"로 설정했으며 사용방법은 "p:프로퍼티이름" 속성을 사용하여 프로퍼티 값을 설정하고, "p:프로퍼터이름-ref="...""속성을 사용하여 bean 객체를 프로퍼티에 전달할 수 있다.
(4) 임의 빈 객체 전달
=> 보통 <constructor-arg>, <property> 태그를 사용하여 다른 빈 객체를 전달받게 되는데 식별 값을 갖지 않는 빈 객체를 생성하여 전달할 수도 있다.
JdbcDao.java
JdbcService.java
ExamMain.java
exam05.xml
결과
여기서 주의할 점은 임의빈 객체는 식별 값(id혹은 name)을 갖지 않기 때문에, 해당 객체를 재사용할 수 없다.
(위의 예제에서는 보여주기 위해 id="dao"라는 식별 값 설정 : 작성해도 에러는 아님)
기본적으로 식별 값이 없기 때문에 재사용할 수 없으며 또한 위 소스처럼 식별 값을 작성했다 하더라도 그 객체를 다른곳에서 재사용할 수는 없다.
=>결과 창을 보면 defining beans [service]이렇게 나와 있는것처럼 스프링 컨테어너는 service라는 식별 값의 bean만 생성했다는 것을 알 수 있다. 그렇기 때문에 id="dao"이런식으로 식별 값을 준다하더라도 "dao"라는 식별 값을 다른곳에서 사용할 수 없는 것이다.
'프로그램 > Spring 2.5' 카테고리의 다른 글
[5일차] 빈의 라이프 사이클 (커스텀 초기화/소멸 메서드, BeanNameAware/ApplicationContextAware 인터페이스) (6) | 2010.01.17 |
---|---|
[4일차] 빈 객체 범위 (0) | 2010.01.17 |
[2일차] Bean 생성 및 사용 (6) | 2010.01.13 |
[1일차] spring framework?, DI : Dependency Injection (의존성 주입) (19) | 2010.01.12 |
[Spring] - Spring Framework의 좋은 사이트 (0) | 2009.04.29 |