1.10.6 이름으로 자동탐지되는 컴포넌트

스캐닝 과정 중에 컴포넌트를 자동탐지했을 때 그 빈의 이름은 해당 스캐너가 알고 있는 BeanNameGenerator 전략에 의해 생성된다. 기본적으로 name 값이 있는 어떤 스프링 스테레오타입 어노테이션 (@Component, @Repository, @Service,와 @Controller)도 name value에 따라서 대응되는 빈 정의에 이름을 제공할 것이다.

어노테이션이 name 값이 없거나 탐지된 다른 컴포넌트(커스텀 필터로 발견된 컴포넌트 같은)가 있다면 기본 빈이름 생성기는 대문자로 쓰지 않고 정규화되지 않은 클래스명을 리턴한다. 예를 들어 다음 두 컴포넌트가 담지되었다면 이름은 myMovieListermovieFinderImpl가 될 것이다.

@Service("myMovieLister")
public class SimpleMovieLister {
    // ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
    // ...
}

기본 bean-naming 전략에 의존하기를 원하지 않으면, 사용자 정의 bean-naming 전략을 제공 할 수 있습니다. 먼저BeanNameGenerator 인터페이스를 구현하고 , 인수가없는 기본 생성자를 포함시켜야합니다. 그런 다음 스캐너 설정시 정규화 된 클래스 이름을 제공하십시오. 다음 예제의 주석과 bean 정의는 다음과 같습니다.

@Configuration
@ComponentScan(basePackages = "org.example", nameGenerator = MyNameGenerator.class)
public class AppConfig {
    ...
}
<beans>
    <context:component-scan base-package="org.example"
        name-generator="org.example.MyNameGenerator" />
</beans>

일반적으로 다른 구성 요소가 명시 적으로 참조를 만들 때마다 주석과 함께 이름을 지정하는 것이 좋습니다. 반면, 자동 생성 된 이름은 컨테이너가 배선을 담당 할 때마다 적절합니다.

Last updated