컴포넌트 스캔

Haechan Kim·2023년 1월 27일
0

Spring

목록 보기
26/68
post-custom-banner

컴포넌트 스캔 (Component Scan) : 스프링이 스프링 빈으로 등록될 준비 된 클래스들 스캔해 빈으로 등록해주는 과정.
@Component 가진 모든 대상 가져와서 빈에 등록하기 위해 찾는 과정.

컴포넌트 스캔이란? : 빈 객체를 컴포넌트 클래스에 구현하면 앱 실행 시 스프링이 컴포넌트 클래스들을 탐색하고 빈 객체들을 컨테이너에 등록하는 방법.
컴포넌트 클래스는 @Component 어노테이션이 붙은 클래스이며, 이 클래스의 객체가 스트링 컨테이너에 빈 객체로 자동등록 되는 것.

  • 빈 이름 기본 전략 : 가장 앞 문자 소문자로 바꾼 것이 빈 이름이 됨.
    수동 지정 시 @Component("지정할 이름")

  • 컴포넌트 스캔 범위 : @ComponentScan 어노테이션이 있는 파일의 패키지 아래를 찾음.

스프링 빈 등록 시 @Bean 사용.

@Autowired 사용해 자동 의존관계 주입

자동 의존 관계 주입 : 의존 관계 주입을 스프링 컨테이너에 등록된 빈에서 찾아 설정하는 방법

https://kth990303.tistory.com/17
@Autowired 어노테이션 : 의존관계 자동 주입 어노테이션. 스프링 컨테이너가 자동으로 해당 스프링 빈 찾아 등록해줌. 여기서 해당 빈은 @Componenet 어노테이션 붙여진 빈에 해당한다.

즉, @Component가 붙여진 클래스들은 스프링 빈으로 등록되는 것이고,
@Autowired가 붙여지면 의존관계 자동 주입이 이루어지는 것이다!

<질문>

  • 컴포넌트 스캔이 무엇인가요? 관련 어노테이션을 사용해서 설명해주세요.
    빈 객체를 @Component 붙은 컴포넌트 클래스에 구현하면 스프링이 컴포넌트 클래스들을 탐색하고 빈 객체들을 컨테이너에 등록하는 방법이다.
    @Bean 어노테이션 하나하나 붙이고 의존관계 주입 직접 할 필요 없다.

  • @Configuration, @Service, @Repository, @Controller, 등의 어노테이션에 전부 공통적으로 어떤 어노테이션 포함되어 있나요? 해당 어노테이션이 붙은 클래스는 무엇의 대상이 되나요?
    @Component 어노에이션이 붙은 클래스는 전부 컴포넌트 스캔의 대상이 된다.

  • @ComponentScan 어노테이션과 컴포넌트 스캔 범위 대해 설명해주세요.
    컴포넌트 스캔 사용 위해선 설정 정보 클래스에 @ComponentScan 붙여야 한다. 이때 컴포넌트 스캔의 범위는 설정 정보 클래스 패키지 포함한 모든 하위 패키지.

  • 모든 클래스가 컴포넌트 스캔 되는것을 막기 위해서 어떻게 해야 할까요?
    필요한 위치부터 탐색 시작할 수 있도록 @ComponentScan(basePackages = "hello.core")와 같이 범위를 설정한다.
    참고로, 스프링 부트를 사용하면 스프링 부트의 대표 시작 정보인 @SpringBootApplication를 프로젝트 시작 루트 위치에 두는 것이 관례이다. @SpringBootApplication 어노테이션에 @ComponentScan이 들어있기 때문에 하위 패키지 모두 컴포넌트 스캔의 대상이 된다.

  • 언제 @AutoWired 어노테이션을 생략할 수 있나요?
    생성자가 단 하나인 경우 어노테이션 생략이 가능하다. 두개 이상인 경우 의존성을 주입할 생성자에 어노테이션 달아주면 된다.
    https://hue9010.github.io/spring/autowired/

post-custom-banner

0개의 댓글