[Spring] ComponentScan 대상에 대한 나름의 이해

2023. 10. 3. 19:48Spring

ComponentScan의 기본 스캔 대상에 대한 인자로 basePackages, basePackageClasses가 있는데

basePackages는 직접 스캔을 시작하는 패키지를 지정해주는 것이다.

basePackageClasses는 Class 바로 위에 있는 Package로부터 시작된다.

저것들을 안넣어준 디폴트는 그 class의 바로 위에 있는 package가 스캔의 대상이 된다.

그런데 SpringBoot를 이용하면 @SpringBootApplication 안에 @ComponentScan이 포함되어 프로젝트 최상위 패키지부터 스캔을 알아서 해준다. 즉 ComponentScan을 따로 할 필요가 없는 것이다.

@Controller, @Repository, @Service, @Configuration 등도 @Component로 인식하고 스캔의 대상이 된다.

정확한 이유는 저 안에 @Component가 있다. 이건 어노테이션 상속이 아니라 스프링이 해주는 기능이다. 스프링이 알아서 어노테이션 안으로 들어가서 @Component를 읽는다. 그리고 각각 @Component에 더해 부가기능들이 존재한다.

다만 @Service는 딱히 그런 기능은 없고 핵심비즈니스로직에 들어가는 Class임을 나타내기 위해 사용한다. 비즈니스 계층을 인식하는데 도움을 준다.

 

Reference


https://www.inflearn.com/course/lecture?courseSlug=%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&unitId=55369 

 

학습 페이지

 

www.inflearn.com