@ComponentScan
- @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다
- 기본 이름은 클래스명에서 앞글자만 소문자로 바꿔 사용한다.
@Autowired
- 의존관계 자동 주입
- 빈 저장소에서 타입이 같은 빈을 찾아서 주입 => 타입이 같은게 있으면?
- getBean(xxx.class)와 같다
탐색을 시작할 패키지의 지정 가능
@ComponentScan(
basePackages = "hello.core",
}
- defualt: 설정 정보 클래스 위치부터 스캔
- 권장 방법: 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것(스트링 부트도 이 방법 지원)
컴포넌트 스캔 기본 대상
- @Component : 컴포넌트 스캔에서 사용
- @Controlller : 스프링 MVC 컨트롤러로 인식
- @Service : 특별한 처리 X, 개발자 입장에서 서비스 로직이 있다는 것을 알려준다
- @Repository : 스프링 데이터 접근 계층으로 인식, 데이터 계층의 예외를 스프링 예외로 변환
- @Configuration : 프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리
필터?
=> 필요할 때 공부해서 사용하자!
- 스프링 부트: 컴포넌트 스캔을 기본으로 제공
- 권장사항: 옵션을 변경하기 보다는 스프링의 기본 설정에 최대한 맞추어 사용
중복 등록과 충돌
-
같은 이름의 빈이 있을 때 ConflictingBeanDefinitionException 예외 발생
-
스프링에서는 수동 빈 등록과 자동 빈 등록에서 빈 이름이 충돌되면? 자동 빈을 수동 빈으로 오버라이딩
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
=> application.properties에 쓰면 오버라이딩 허용