Skip to content

탐색 위치와 기본 스캔 대상 #27

@mingsound21

Description

@mingsound21

✅ 탐색 위치 설정

@componentscan의 인자로
basePackages : 해당 패키지의 하위 클래스들을 탐색 위치로 지정
basePackageClasses : 해당 클래스가 속한 패키지의 하위 클래스들을 탐색 위치로 지정

🧐 But, 만약 특별히 탐색 대상 클래스나 패키지를 지정하지 않는다면?

default 값은 해당 @componentscan이 붙은 클래스가 속한 패키지의 하위 클래스들을 탐색 위치로 지정한다.

👍🏻 컴포넌트 스캔 대상 지정할 때, 권장하는 방법은?

@componentscan의 인자로 특정 패키지를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트의 최상단에 두어, default값으로 지정된, 해당 @componentscan이 붙은 설정정보 클래스의 하위 클래스들 (= 전부다)를 컴포넌트 스캔의 대상으로 지정하자.

👏🏻 최근의 스프링부트도 해당 권장 방식을 사용한다.

스프링부트 프로젝트를 만들면, @SpringBootApplication 어노테이션이 붙은 클래스가 프로젝트의 최상단에 위치하고 있고, @SpringBootApplication 클래스 위에 @componentscan이 붙어있다.

따라서 우리가 스프링부트를 사용할 때, @componentscan 어노테이션을 사용한 적이 없었던 것이다.

📍 컴포넌트 스캔 대상 어노테이션의 종류

@componet 뿐만 아니라,
@controller, @service, @repository, @configuration

⚠️ 주의) 애노테이션에는 상속 관계라는 것이 없다

특정 애노테이션 정의 클래스 위에 다른 애노테이션이 붙어있어서 들고 있다는 것을 인식할 수 있는 것은 자바 언어가 아닌, 스프링이 지원하는 기능이다.

📍 특정 애노테이션의 부가 기능

  • @controller : 스프링 MVC 컨트롤러로 인식
  • @service : 특별한 처리를 하진 않고, 개발자들이 핵심 비즈니스로직이 여기 있겠구나라고 비즈니스 계층 인식을 더 쉽게 할 수 있도록 표시하는 용도
  • @repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
  • @configuration : 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions