컴포넌트 스캔

KJH·2023년 3월 5일
0
post-custom-banner

컴포넌트 스캔

이전 강의들에서는 @Bean 등을 통해서 직접 스프링 빈을 등록함 (귀찮음)

설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔
설정 정보에 @ComponentScan을 붙여주기만 하면 됨

컴포넌트 스캔은 이름 그대로 @Component 어노테이션이 붙은 클래스들을 스캔해서 스프링 빈으로 등록

@Autowired를 사용하면, 생성자에서 여러 의존관계도 한번에 주입 가능

순서
1. @ComponentScan

  • @ComponentScan@Component가 붙은 모든 클래스를 스프링 빈으로
    • 빈 이름 기본 : 앞글자만 대문자로
      MemberServiceImpl => memberServiceImpl
    • @Component("name") 으로 직접 이름 지정도 가능
  1. 의존관계 자동 주입
  • 생성자에 @Autowired 를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입
  • 파라미터가 많아도 다 찾아서 주입해줌

탐색 위치, 기본 스캔 대상

탐색 위치 지정

  @ComponentScan(
          basePackages = "hello.core", //배열도 가능
}

지정하지 않으면, @ComponentScan 이 붙은 클래스의 패키지가 시작 위치가 됨

설정 정보 클래스의 위치를 프로젝트 최상단에 두는걸 권장

  • @Controller : 스프링 mvc 컨트롤러로 인식
  • @Repository : 데이터 접근 계층으로 인식 =>
  • @Configuration : 설정 정보로 인식, 싱글톤을 위한 추가 처리
  • @Service : 개발자들에게 알려주는용도 ???

충돌

컴포넌트 스캔시 같은 빈을 등록하면?

case 1 : 자동 빈 등록 vs 자동 빈 등록
case 2 : 자동 빈 동록 vs 수동 빈 등록

자동 vs 자동

  • 에러발생 ConflictingBeanDefinitionException

수동 vs 수동

수동 등록 빈이 우선권을 가짐 (오버라이딩)
스프링 부트에서는 오류발생!

post-custom-banner

0개의 댓글