• Home
  • About
    • Junseok photo

      Junseok

      개발자 블로그

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Java
    • java-basic
    • java-solid
    • java-pattern
    • java-logging
  • Javascript
  • Angular
  • spring
    • spring-framework
    • spring-boot
    • spring-test
  • server
    • jeus
    • webtob
    • tomcat
  • test
    • junit
    • assertj
    • hamcrest
    • dbunit
    • spring
  • docker
  • unix
  • maven
  • db
  • network
  • eclipse
  • intellij
  • microservices
  • etc

BeanNameGenerator - Bean naming

12 Mar 2018

Reading time ~1 minute

구성 요소가 검색 프로세스의 일부로 자동 감지되면 BeanName은 해당 스캐너에 알려진 BeanNameGenerator 전략에 의해 생성됩니다.
기본적으로 name value를 포함하고있는 모든 Spring 스테레오 타입 어노테이션 (@Component, @Repository, @Service 및 @Controller)은 해당 bean 정의(definition)에 해당 이름을 제공합니다.

그러한 어노테이션에 name value가 포함되지 않은 경우, 또는 검출 된 다른 컴퍼넌트 (커스텀 필터로 검출 된 것 등)의 경우, 디폴트 bean 네임 제네레이터는, 캡슐화되지 않고 검증되어 있지 않은(non-qualified) 클래스 명을 돌려줍니다.
예를 들어, 다음 두 구성 요소가 검색된 경우 이름은 myMovieLister 및 movieFinderImpl입니다.

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

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


@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>

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



springframework Share Tweet +1