본문 바로가기

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

3.1. Bean에 이름 붙이기

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

 

 

모든 bean은 하나 이상의 식별자를 가지고 있다. 이 식별자들은 bean을 관리하는 컨테이너 안에서 유일해야만 한다. 보통 bean은 하나의 식별자를 가진다. 하지만 하나 이상이 필요하다면, 여분의 것들은 alias로서 고려될 수 있다.

 

XML 기반의 설정 메타데이터에서는, bean 식별자를 특정하기 위해 'id' 속성과 'name' 속성 또는 둘 다를 사용한다. 'id' 속성은 하나의 id로만 특정할 수 있다. 관습적으로 이런 이름들은 '알파벳+숫자' 조합으로 이루어진다. 하지만 특수문자 역시 포함될 수 있다. 만약 bean에 대한 다른 alias들을 추가하고 싶다면, 그것들을 name 속성에 ',(콤마)', ';(세미콜론)', '(스페이스)'로 구분한 채 특정해주면 된다. 역사적으로 스프링 3.1버전 이전에서는, id 속성이 제한된 문자로만 작성 가능한 'xsd:ID' 타입으로 정의되었다. 3.1버전에서는 'xsd:string' 타입으로 정의된다. XML parser에게는 더이상 id가 유일할 필요가 없어졌더라도, 컨테이너에게는 여전히 id가 유일해야만 한다는 사실을 기억하라.

 

bean을 위해서 id나 name을 제공해야만 하는 것은 아니다. 만약 id나 name을 명확하게 제공하지 않는다면 컨테이너가 그 bean을 위한 유일한 이름을 만들어낸다. 그러나 ref 요소를 사용하거나 서비스 로케이터 스타일의 검색을 통해 그 bean을 이름으로 호출하도록 하려면 반드시 name을 제공해야만 한다. inner beans나 autowiring된 협력자들을 사용하는 것과 관련될 때만 name을 제공하지 않을 수 있다.

 

Bean 명명 규칙들

bean에 이름을 붙일 때는 '객체 필드명을 위한 표준 자바 규칙'을 사용하는 것이 관례다. 즉, bean의 이름은 소문자로 시작하여 낙타표기법으로 작성하면 된다. 예를 들면 accountManager, accountService, userDao, loginController 등이다.

일관되게 bean을 명명하는 것은 설정이 더 쉽게 읽히고 이해될 수 있도록 한다. 또한 스프링 AOP를 사용한다면, 이름을 통해 일련의 bean에게 advice의 적용할 때에 큰 도움을 받는다.

 

※ 클래스패스에서 컴포넌트를 찾을 때, 스프링은 아직 이름이 없는 컴포넌트의 이름들을 만들어낸다. 그때 위에 서술한 규칙들을 따른다. 클래스 이름을 가져와 첫번째 글자를 소문자로 바꾸는 것이다. 하지만 맨 앞의 두 글자가 모두 대문자인 것처럼 특수한 경우에는 원래의 이름을 유지해준다. 이는 스프링이 사용하는 java.beans.Introspector.decapitalize에 정의된 규칙과 같다.