-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
✅ 탐색 위치 설정
@componentscan의 인자로
basePackages : 해당 패키지의 하위 클래스들을 탐색 위치로 지정
basePackageClasses : 해당 클래스가 속한 패키지의 하위 클래스들을 탐색 위치로 지정
🧐 But, 만약 특별히 탐색 대상 클래스나 패키지를 지정하지 않는다면?
default 값은 해당 @componentscan이 붙은 클래스가 속한 패키지의 하위 클래스들을 탐색 위치로 지정한다.
👍🏻 컴포넌트 스캔 대상 지정할 때, 권장하는 방법은?
@componentscan의 인자로 특정 패키지를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트의 최상단에 두어, default값으로 지정된, 해당 @componentscan이 붙은 설정정보 클래스의 하위 클래스들 (= 전부다)를 컴포넌트 스캔의 대상으로 지정하자.
👏🏻 최근의 스프링부트도 해당 권장 방식을 사용한다.
스프링부트 프로젝트를 만들면, @SpringBootApplication 어노테이션이 붙은 클래스가 프로젝트의 최상단에 위치하고 있고, @SpringBootApplication 클래스 위에 @componentscan이 붙어있다.
따라서 우리가 스프링부트를 사용할 때, @componentscan 어노테이션을 사용한 적이 없었던 것이다.
📍 컴포넌트 스캔 대상 어노테이션의 종류
@componet 뿐만 아니라,
@controller, @service, @repository, @configuration
⚠️ 주의) 애노테이션에는 상속 관계라는 것이 없다
특정 애노테이션 정의 클래스 위에 다른 애노테이션이 붙어있어서 들고 있다는 것을 인식할 수 있는 것은 자바 언어가 아닌, 스프링이 지원하는 기능이다.
📍 특정 애노테이션의 부가 기능
- @controller : 스프링 MVC 컨트롤러로 인식
- @service : 특별한 처리를 하진 않고, 개발자들이 핵심 비즈니스로직이 여기 있겠구나라고 비즈니스 계층 인식을 더 쉽게 할 수 있도록 표시하는 용도
- @repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
- @configuration : 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels