본문 바로가기

SpringFramework Core - I. IoC 컨테이너/3. Bean 개관

3.1.1. Bean 정의 외부의 Bean에게 alias 붙이기

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-beanname-alias

 

 

bean 정의에서는, 하나의 id와 여러 개 name들의 조합을 통해서 bean에게 하나 이상의 이름을 제공할 수 있다. 이 이름들은 해당 bean에 대한 alias와 동등하다. 그리고 이는 컴포넌트가 bean 이름을 통해 의존성을 이용할 수 있게 하는 등의 몇몇 경우에는 유용하다. 

 

그러나, bean이 실제로 정의되는 곳에서 alias를 설정하는 것이 언제나 적절한 것은 아니다. 때때로는 다른 곳에서 정의된 bean에 대한 alias를 소개하는 것이 바람직할 때가 있다. 이는 특히 설정이 각각의 서브시스템에 나뉘어져 있고 그 서브시스템들이 자신들만의 객체에 대한 정의를 가지고 있는, 큰 시스템에서 일반적이다. XML 기반의 설정 메타데이터에서는, <alias/> 요소를 이용하여 이를 수행할 수 있다. 다음 예시를 참고하자.

<alias name="fromName" alias="toName" />

이 경우에, 같은 컨테이너 내의 'fromName'이라는 이름의 bean은 이 alias 정의를 사용한 후로는 'toName'으로도 호출될 수 있다.

 

예를 들어 서브시스템 A의 설정 메타데이터가 DataSource를 'subsystemA-dataSource'라는 이름으로 부르고 있고, 서브시스템 B의 설정 메타데이터는 DataSource를 'subsystemB-dataSource'라는 이름으로 부르고 있다고 하자. 이 두 서브시스템을 사용하는 메인 애플리케이션을 구성할 때, 메인 애플리케이션은 DataSource를 'myApp-dataSource'라는 이름으로 부른다. 세 이름이 모두 같은 객체를 지칭할 수 있도록 하기 위해서는 다음과 같은 alias 정의를 설정 메타데이터에 추가해야 한다.

<alias name="myApp-dataSource" alias="subsystemA-dataSource" />
<alias name="myApp-dataSource" alias="subsystemB-dataSource" />

이제 각 컴포넌트들과 메인 애플리케이션은 같은 bean을 부르면서도, 유일하며 서로의 정의와 충돌하지 않는 이름으로 dataSource를 부를 수 있게 된다. 

 

  자바 설정

자바 설정을 사용한다면, @Bean 어노테이션을 통해 alias를 제공할 수 있다. 자세한 내용은 '@Bean 어노테이션 사용하기'를 참고하라