본문 바로가기

SpringFramework Core - I. IoC 컨테이너/10. 클래스패스 스캐닝과 관리받는 컴포넌트들

(10)
10.9. 후보 컴포넌트들의 인덱스 생성하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-index 클래스패스 스캐닝은 매우 빠르지만, 후보들의 정적인 리스트를 만들어놓음으로써 대규모 애플리케이션의 startup 퍼포먼스를 향상시킬 수 있다. 이 모드에서는 컴포넌트 스캔의 대상이 되는 모든 모듈들이 이 메커니즘을 사용해야만 한다. ※ context에게 특정 패키지들에 있는 후보들을 스캔해달라고 요청할 때처럼, @ComponentScan이나 디렉티브들은 생략되어서는 안 된다. ApplicationContext가 인덱스를 찾으면, 자동적으로 클래스패스 대신에 인덱스를 사용한다. 인덱스를 생성하기 위해서는..
10.8. 어노테이션으로 Qualifier 메타데이터 제공하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-qualifiers @Qualifier 어노테이션은 'Qualifier들을 활용한 어노테이션 기반의 정교한 Autowiring'에서 알아봤다. 해당 장에서는 @Qualifier 어노테이션의 용례와, autowire 후보들을 정교하게 제어하게 해주는 커스텀한 Qualifier 어노테이션들에 대해 알아봤다. 그 예시들은 XML bean 정의에 기반했기 때문에, XML의 bean 요소의 자식 요소들인 'qualifier'나 'meta' 요소들을 통해 후보 bean 정의들에 수식자 메타데이터를 제공했다. 클래스패스 스캐..
10.7. 자동 탐지된 컴포넌트들에 Scope 제공하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-scope-resolver 스프링의 관리를 받는 일반적인 컴포넌트들처럼, 자동 탐지된 컴포넌트는 기본값이면서도 가장 흔하게 'singleton' scope를 갖는다. 그러나 가끔은 @Scope 어노테이션을 통해 다른 scope를 설정해야될 때가 있다. 그럴 때는 다음 예시처럼 어노테이션 안에 scope의 이름을 제공하면 된다. @Scope("prototype") @Repository public class MovieFinderImpl implements MovieFinder { // ... } ※ @Scope 어..
10.6. 자동 탐지된 컴포넌트들에 이름 붙이기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-name-generator 스캐닝 과정에서 컴포넌트가 자동으로 탐지될 때, 스캐너의 BeanNameGenerator 전략에 따라 bean의 이름이 생성된다. 기본적으로, 어떤 스프링 stereotype 어노테이션이든(@Component, @Repository, @Service) 이름 'value'를 가지고 있으며 그 덕분에 bean 정의에 이름을 부여할 수 있다. 만약 그런 어노테이션들이 이름 'value'를 가지고 있지 않거나 탐지된 컴포넌트가 없다면, 기본 bean 이름 생성기가 소문자로 변환된 non-qua..
10.5. 컴포넌트 안에서 bean 메타데이터 정의하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factorybeans-annotations 스프링 컴포넌트들은 컨테이너에게 bean 정의 메타데이터 또한 제공한다. 여러분은 @Configuration이 붙은 클래스에서 bean의 메타데이터를 정의하는 @Bean 어노테이션을 통해 이 일을 할 수 있다. 다음 예시는 그 방법을 보여준다. @Component public class FactoryMethodComponent { @Bean @Qualifier("public") public TestBean publicInstance() { return new TestBean("publ..
10.4. 스캐닝을 커스터마이즈하기 위해 필터 사용하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-filters 기본적으로, @Component, @Repository, @Service, @Controller, @Configuration, @Component를 포함한 커스텀 어노테이션 등이 붙은 클래스들만이 후보 컴포넌트로서 탐지된다. 그러나 커스텀한 필터를 적용함으로써 이 행동을 바꾸거나 확장시킬 수 있다. 커스텀한 필터들을 @ComponentScan 어노테이션의 includeFilters나 excludeFilters 속성에 추가하자(또는 XML 설정의 의 자식인 이나 ). 각 필터 요소들은 type과 ex..
10.3. 자동적으로 클래스를 찾아 bean 정의로 등록시키기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-autodetection 스프링은 stereotype인 클래스들을 자동으로 찾아 ApplicationContext에 적절한 BeanDefinition 인스턴스로 등록시킨다. 예를 들어, 다음 두 클래스들은 그러한 자동 탐색의 대상이 된다. @Service public class SimpleMovieLister { private MovieFinder movieFinder; public SimpleMovieLister(MovieFinder movieFinder) { this.movieFinder = movieFind..
10.2. 메타 어노테이션과 구성 어노테이션 사용하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-meta-annotations 스프링으로부터 제공되는 많은 어노테이션들이 메타 어노테이션으로써 사용될 수 있다. 메타 어노테이션은 다른 어노테이션에 적용될 수 있는 어노테이션이다. 예를 들어, @Service 어노테이션은 @Component에 대한 메타 어노테이션이다. 다음 예시를 보자. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { // ... } 메타 어노테이션들을 결합해..