Spring - @ComponentScan & @Autowired

박민수·2023년 11월 14일
0

Spring

목록 보기
24/46
post-thumbnail

해당 포스팅에서는 @ComponentScan, @Autowired에 대해서 정리해 보고자 한다.

@ComponentScan

컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다.
컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스들을 자동으로 스프링 빈으로 등록한다.
이 때 스프링 빈의 이름은 클래스명의 맨 앞글자만 소문자로 변경해서 클래스명을 그대로 사용한다. (ex: OrderService -> orderService)

만약, 이름을 직접 지정하고 싶다면 @Component("myOrderService")와 같이 직접 설정할 수도 있다.

@Configuration
@ComponentScan
public class AppConfig {
}

컴포넌트 스캔 대상

  • @Component: 컴포넌트 스캔에서 사용한다.
  • @Controller: 스프링 MVC 컨트롤러에서 사용한다.
  • @Service: 스프링 비즈니스 로직에서 사용한다.
  • @Repository: 스프링 데이터 접근 계층에서 사용한다.
  • @Configuration: 스프링 설정 정보에서 사용한다.

필터

@ComponentScan을 사용하면 @Configuration이 붙은 설정 정보들이 모두 자동으로 등록 되기 때문에, 이런 경우 excludeFilters를 이용해서 불필요한 설정 정보는 컴포넌트 스캔 대상에서 제외해 줘야 한다.

  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
@ComponentScan(includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
               excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class))
static class ComponentFilterAppConfig {
}

@Autowired

생성자에 @Autowired 어노테이션을 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입해준다. 생성자에서 여러 의존관계가 존재하더라도 한번에 모두 주입받을 수 있다.


참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글