[Spring] @ComponentScan

·2024년 3월 21일

Spring

목록 보기
4/26
post-thumbnail

💡@ComponentScan

@Component가 붙은 모든 Class들을 자동으로 스캔하여 Bean으로 등록해주는 역할을 해주는 어노테이션이다.

@Component
public class MemoryMemberRepository implements MemberRepository{}

이 때, 스프링 빈의 기본 이름은 클래스 명을 사용하되 맨 앞글자만 소문자를 사용한다.

빈 이름을 직접 지정해주고 싶다면 @ComponentScan("memberService2")이런식으로 이름을 부여하면 된다.

📗@ComponentScan의 탐색 위치

모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 꼭 필요한 위치부터 탐색하도록 @ComponentScan의 탐색 시작 위치를 지정할 수 있다.

@ComponentScan{
	basePakages = "hello.core"
}
  • basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함하여 하위패키지를 모두 탐색한다.
    • basePakages = "hello.core", "hello.service" 처럼 여러 시작 위치를 지정 할 수도 있다.
  • 시작 위치를 지정하지 않으면, @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.

📌권장하는 방법
패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것을 권장한다.
예를들어, 프로젝트 구조가 다음과 같이 되어 있다면

  • com.hello
  • com.hello.service
  • com.hello.repository

com.hello가 프로젝트 시작루트가 되고, 여기에 AppConfig같은 메인 설정 정보를 두고 @ComponentScan애노테이션을 붙인다.

📗@ComponentScan의 기본 대상

@ComponentScan은 @Component 뿐만 아니라 다음과 같은 어노테이션도 추가로 대상에 포함한다.

  • @Component : 컴포넌트 스캔에서 사용
  • @Controller : 스프링 MVC컨트롤러에서 사용
  • @Service : 스프링 비즈니스 로직에서 사용
  • @Repository : 스프링 데이터 접근 계층에서 사용
  • @Configuration : 스프링 설정 정보에서 사용
profile
배우고 기록하며 성장하는 백엔드 개발자입니다!

0개의 댓글