ComponentScan, Autowired

초보개발·2021년 12월 14일
0

Spring

목록 보기
15/37

컴포넌트 스캔과 의존관계 자동 주입

전까지 스프링 빈을 등록하기 위해 자바 코드상으로 @Bean을 추가하거나 xml 파일의 <bean>을 통해 설정 정보에 직접 등록할 스프링 빈을 작성했다. 만약 설정 정보가 방대해지면, 누락되는 문제가 발생하고 하나 하나 수백개 이상의 빈을 반복적으로 등록하기 귀찮아진다.
그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired 기능도 제공하고 있다.

  • 새로운 설정 클래스를 생성한다.
  • 기존 AppConfig와 충돌이 발생하므로 ComponentScan에서 @Configuration이 붙은 클래스를 아래와 같은 코드를 삽입하여 제외시켜 준다.
    • @Configuration 파일을 열어보면 @Component가 붙어 있으므로 스캔의 대상이 된다.
@ComponentScan( 
        excludeFilters = @ComponentScan.Filter(type=FilterType.ANNOTATION,
        classes=Configuration.class)
)
  • 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스들을 스캔해서 스프링 빈으로 등록한다.
  • 마지막으로 자동적으로 의존관계가 주입될 수 있도록 클래스의 생성자에 @Autowired를 붙여주면 된다.

1. @ComponentScan의 작동 방식

  • @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록하고, 이 때 빈 이름은 클래스명을 사용하되 맨 앞글자만 소문자로 변경된다.
    • MemberServiceImpl -> memberServiceImpl
    • 직접 이름 지정 : @Component("memberServiceImpl1")

2. @Autowired 의존관계 자동 주입

  • 생성자에 @Autowired 애노테이션을 지정해주면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아 주입한다.
  • 기본적으로 타입이 같은 빈을 찾아 주입한다.
    • ac.getBean(MemberRepository.class)와 동일하다.

0개의 댓글