컴포넌트 스캔

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

  • 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 <bean> 등을 통해서 설정 정보에 직접 등록할 스프링을 나열했지만 이렇게 등록하다보면 스프링 빈이 정말 많아지고, 설정정보도 커지면서 누락하는 문제도 발생하게 됩니다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공하면서 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공합니다.

AutoAppConfig 생성하기

  • 기존에는 AppConfig에 스프링 빈을 등록했어야 했지만, AutoAppConfig에서는 @ComponentScan을 이용하여 클래스를 등록할 필요가 없습니다.

  • 컴포넌트 스캔을 사용하면 Configuration이 붙은 설정 정보가 자동으로 등록되기 때문에 이전에 만들었던 AppConfig 등 설정 정보가 함께 등록되게 되는데, 이를 방지하기 위하여 excludeFilters를 이용하여 스캔 대상에서 제외시켰습니다. 보통은 설정정보를 스캔 대상에서 제외하지 않음. 기존 예제 코드를 유지하기 위해서 사용함

@Component와 @Autowired

  • 스프링 빈으로 등록 할 각 클래스가 컴포넌트 스캔의 대상이 되도록 모든 클래스에 @Component 애노테이션을 붙여주면 됩니다.
  • 컴포넌트 스캔을 사용하여 자동으로 스프링 빈을 등록하게 되면 의존관계 주입도 해당 클래스 안에서 해결해야 하기 때문에 @Autowired를 사용하여 자동으로 주입해주면 됩니다. @Autowired로 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입해줍니다.

탐색 위치와 기본 스캔 대상

  • @ComponentScan(basePackages = "") 컴포넌트 스캔의 어노테이션 안에 basePackages(해당 패키지를 포함하여 하위 패키지 모두 탐색) 또는 basePackageClasses(지정한 클래스의 패키지를 탐색 시작 위치로 지정)를 사용하여 시작 위치를 지정할 수 있습니다.
  • 패키지의 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것을 권장합니다.
  • @Component, @Controller, @Service, @Repository, @Configuration는 컴포넌트 스캔의 기본 대상이 됩니다.

+ Recent posts