'ref' 요소는 <constructor-arg/>와 <property/> 내에서의 가장 마지막 요소다. 여기서 컨테이너의 관리를 받고 있는 다른 bean에 대한 참조 프로퍼티를 설정할 수 있다. 프로퍼티로 세팅하는 bean에게 참조된 bean은 의존성이 된다. 그리고 참조된 bean은 프로퍼티로 세팅되기 전에 의무적으로 초기화되어야 한다(만약 협력자가 싱글턴 bean이면 이미 컨테이너에 의해 초기화되어 있다). 모든 참조들은 궁극적으로 다른 객체에 대한 참조이다. bean이나 parent 속성을 통해 다른 객체의 ID나 이름을 특정했는가에 따라 Scoping과 유효성이 결정된다.
대상 bean을 <ref/> 태그의 bean 속성을 통해 특정하는 것은 가장 일반적인 형태다. 그리고 같은 XML 파일에 설정되어있는가를 불문하고 같은 컨테이너나 부모 컨테이너에 있기만 하다면 그 어떤 bean이라도 참조할 수 있게 해준다. bean 속성값은 대상 bean의 id 속성이나 name 속성과 일치할 것이다. 다음 예시는 ref 요소를 어떻게 사용하는지 보여준다.
<ref bean="someBean" />
parent 속성을 통해 대상 bean을 특정하는 것은 현재 컨테이너의 부모 컨테이너에 있는 bean을 참조할 수 있게 해준다. parent 속성값은 마찬가지로 대상 bean의 id 속성이나 name 속성과 일치할 것이다. 대상 bean은 반드시 현재 컨테이너의 부모 컨테이너에 있어야 한다. 이러한 bean 참조의 변형 형식은 주로 계층화된 컨테이너를 사용할 때 쓰게될 것이다. 또는 부모 컨테이너에 있는 bean을 부모 bean의 이름과 똑같은 proxy로 감싸고 싶을 때 사용하게될 것이다. 다음 두 예시는 parent 속성을 어떻게 사용하는지 보여준다.
<!-- 부모 컨텍스트 -->
<bean id="accountService" class="com.something.SimpleAccountService">
<!-- 필요한 의존성을 삽입한다 -->
</bean>
<!-- 자식(후손) 컨텍스트 -->
<bean id="accountService" <!-- 부모 bean과 같은 bean 이름 -->
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref parent="accountService" /> <!-- 부모 bean을 어떻게 부르고 있는지 보자 -->
</property>
<!-- 필요한 설정과 의존성들이 위치함 -->
</bean>
※ ref 요소의 local 속성은 4.0 beans XSD에서 더이상 지원하지 않는다. 보통의 bean 참조에 더 이상 값을 제공하지 않기 때문이다. 4.0 스키마로 업그레이드를 할때 ref local 참조를 ref bean으로 바꿔라.
'SpringFramework Core - I. IoC 컨테이너 > 4. 의존성' 카테고리의 다른 글
4.2.5. Collections (0) | 2020.03.17 |
---|---|
4.2.4. 내부 bean들 (0) | 2020.03.17 |
4.2.2. idref 요소 (0) | 2020.03.16 |
4.2.1. Straight Values (원시 타입, String 등등) (0) | 2020.03.16 |
4.2. 의존성과 설정에 대한 상세 (0) | 2020.03.16 |