컴포넌트 스캔 - 탐색 위치 & 기본 스캔 대상

2023. 7. 17. 21:12Spring/[inflearn]스프링 핵심 원리 - 기본편

◎ 탐색할 패키지 위치 지정

-> 모든 자바 클래스를 컴포넌트 스캔을 하면 시간이 오래 걸린다. 

-> 컴포넌트 스캔이 필요한 위치부터 탐색하도록 지정할 수 있다.

@ComponentScan(
        basePackages ="practice.core.member", //member만 컴포넌트 스캔의 대상이 된다.
        basePackageClasses = AutoAppConfig.class,
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
        // @Configuration이 붙은 클래스는 컴포넌트 스캔에서 제외
)

- basePackages : 탐색할 패키지의 시작 위치를 지정한다. 위 코드에서는 member패키지를 시작위치로 지정했다.

- basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다. 위 코드에서는 AutoAppConfig 클래스가 위치하는 패키지부터 탐색을 시작한다.

- 만약 시작위치를 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작위치가 된다.

- 스프링 부트의 대표 시작 정보 @SpringBootApplication 내부에는 @ComponentScan이 있어 보통 @SpringBootApplication을 프로젝트 시작 루트 위치에 위치시킨다.

 

◎ 컴포넌트 스캔 대상

-> 컴포넌트 스캔은 @Component 뿐 아니라 @Controller, @Service, @Repository, @Configuration도 대상에 포함한다.

-> @Component : 컴포넌트 스캔에서 사용

-> @Controller : 스프링 MVC 컨트롤러에서 사용

-> @Service : 스프링 비즈니스 로직에 사용

-> @Repository : 스프링 데이터 접근 계층에서 사용

-> @Configuration : 스프링 설정정보에서 사용

 

-> 해당 클래스에 소스 코드를 보면 모두 @Component가 포함되어 있다.

 

-> 애너테이션에는 상속관계가 없기 때문에 사실 애너테이션이 특정 애너테이션을 포함하고 있는 것을 인식하는 것은 자바가 지원하는 것이 아니라 스프링이 지원하는 기능이다.

 

 

☆ 참고

[인프런]스프링 핵심 원리 - 기본편