번호 | 목차 |
---|---|
1. | 컴포넌트 스캔 |
2. | 탐색 위치와 기본 스캔 대상 |
3. | 필터 |
4. | 중복 등록과 충돌 |
컴포넌트 스캔(Component Scan)
이라는 기능을 제공함@Autowired
기능도 제공함@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes =
Configuration.class))
public class AutoAppConfig {
}
@Component
애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록함참고: @Configuration 이 컴포넌트 스캔의 대상이 된 이유는 @Configuration 소스코드를 열어보면
@Component
애노테이션이 붙어있기 때문임
@ComponentScan
은 @Component
가 붙은 모든 클래스를 스프링 빈으로 등록함@Component("memberService2")
와 같이 이름 부여@Autowired
지정 시 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입함getBean(MemberRepository.class)
와 동일@ComponentScan(
basePackages = "hello.core",
}
basePackages
: 탐색할 패키지의 시작 위치 지정, 이 패키지를 포함해서 하위 패키지 모두 탐색basePackageClasses
: 지정한 클래스의 패키지를 탐색 시작 위치로 지정@SpringBootApplication
를 이 프로젝트 시작 루트 위치에 두는 것이 관례(그리고 이 설정안에 @ComponentScan
이 들어있음!)
@Component
: 컴포넌트 스캔에서 사용
아래 애노테이션 모두 @Component 애노테이션을 포함하고 있음
@Controlller
: 스프링 MVC 컨트롤러에서 사용
@Service
: 스프링 비즈니스 로직에서 사용
@Repository
: 스프링 데이터 접근 계층에서 사용, 데이터 계층의 예외를 스프링 예외로 변환해줌
@Configuration
: 스프링 설정 정보에서 사용, 스프링 빈이 싱글톤을 유지하도록 추가 처리함
includeFilters
: 컴포넌트 스캔 대상을 추가로 지정함excludeFilters
: 컴포넌트 스캔에서 제외할 대상을 지정함
ANNOTATION
: 기본값, 애노테이션을 인식해서 동작함
ex) org.example.SomeAnnotation
ASSIGNABLE_TYPE
: 지정한 타입과 자식 타입을 인식해서 동작함
ex) org.example.SomeClass
ASPECTJ
: AspectJ 패턴 사용
ex) org.example..Service+
REGEX
: 정규 표현식
ex) org.example.Default.
CUSTOM
: TypeFilter라는 인터페이스 구현해서 처리
ex) org.example.MyTypeFilter
Overriding bean definition for bean 'memoryMemberRepository' with a different definition: replacing
Consider renaming one of the beans or enabling overriding by setting
spring.main.allow-bean-definition-overriding=true