컴포넌트 스캔

qkrrnjswo·2023년 4월 17일
0

Inflearn Spring

목록 보기
10/13

@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에 쓰면 오버라이딩 허용

0개의 댓글