Spring 컴포넌트 스캔

이상민·2021년 8월 19일
0

스프링

목록 보기
2/9
post-thumbnail

1. 컴포넌트 스캔

@Configuration 클래스에 @Bean으로 명시적으로 등록하지 않고 애너테이션을 통해 등록하기
스프링이 Bean을 검색해 자동으로 등록해준다

  • 스테레오 타입 애너테이션을 이용해 스캔 대상을 지정해줄 수 있다

  • 스테레오 타입 : UML에서 <<Inteface>>처럼 특성 요소를 상황이나 도메인에 맞게 분류해주는 것

  • Spring 2.0에서 @Repository가 등장했고 이후 Spring 2.5에서 널리 사용되며 @Component, @Service, @Controller, @Configuration 등이 등장했다
// 기존 설정 클래스 
@Configuration
public class AppConfiguration {
    @Bean 
    public SomeRepository someRepo() {
        ...
    }
    
    @Bean
    public OtherRepository otherRepo() {
        ...
    }
}
// 컴포넌트 스캔을 적용한 설정 클래스 
@Configuration
@ComponentScan
public class AppConfiguration {
}

// SomeRepository.java
@Repository
public class SomeRepository implements Repository {
    ...
}

// OtherRepository.java
@Repository
public class OtherRepository implements Repository {
   ...
}

2. 컴포넌트 스캔 대상 지정하기

@ComponentScan만 사용하면 모든 컴포넌트를 스캔하기 때문에 설정해줘야한다

2-1. basePackages

@ComponentScan(basePackages = {"org.group.package.sub1", "org.group.package.sub2"})
  • 스캔할 패키지를 지정해 해당 패키지들만 스캔하게 할 수 있다

2-2. basePackageClasses

// sub1에 있는 Some 클래스와 sub2에 있는 Other 클래스 
@ComponentScan(basePackageClasses = {Some.class, Other.class}
  • 지정한 클래스가 존재하는 패키지를 스캔한다

2-3. excludeFilters

@ComponentScan(
    basePackages = {"org.group.package.sub1"},
    excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Some.class)}
    )
  • 타입을 지정해 제외할 것을 필터링한다
  • 정규식을 통해 필터링 할 수도 있다

2-4. includeFilters

@ComponentScan(
    basePackages = {"org.group.package.sub2"},
    includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Some.class)}
    )
  • excludeFilters와 비슷하게 작동하지만, 반대로 추가할 Bean을 설정한다
profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글