• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

강의를 듣다가 궁금한점이 생겼습니다 .

18.10.13 23:06 작성 조회수 79

0

강의에 보면 .

@ComponentScan 일떄도 @Configure 어노테이션을 타고

@EnableAutoConfiguration 일떄도 @Configure 등록을 하는데 ...

두개의 차이점이 멀까요 ???

ComponentScan은 그냥 개인이 작성한거를 가지고 와서 Bean등록하는거고 ..

EnableAutoConfiguration 에서는 등록되어있는거를 가지고 와서 조건에 맞게 제외하던가 .적용하던가 하는 그차이인가요 ???두개다 등록이 되는거에 대한 차이를 모르겠습니다 .

답변 1

답변을 작성해보세요.

6

@Configure 어노테이션이라고 칭하시는게 어떤 것들인지 정확히 모르겠는데요. 혹시 @Configuration을 말하시는건가요?

@ComponentScan은 스프링 프레임워크가 제공하는 기능으로, 특정 패키지 이하에 있는 모든 클래스를 순회하면서 그 위에 @Configuration, @Component 같은 애노테이션이 붙은 클래스를 빈으로 등록해줄 때 사용이 됩니다. 스프링 부트가 제공하는 자동 설정용 클래스에도 @Configuration이 붙어있으니 그 경로가 @ComponentScan에 포함이 되면 빈으로 등록이 될 수 있긴합니다만, 스프링 부트가 제공하는 자동설정은 보통 컴포넌트 스캔으로 읽어오진 않습니다. (기술적으로는 그래도 되긴 하지만)

그리고 @EnableAutoConfiguration은 스프링 부트가 제공하는 기능으로, 스프링 부트가 만든 여러 자동 설정을 사용하도록 기능을 조건에 따라 활성화 시키는 역할을 합니다. 그때에 @Configuration 을 붙인 빈 설정을 읽어오는데, 그 때는 보통 @Import라는 애노테이이션과 @Conditional*의 조합으로 읽어들입니다.

결론적으로 말씀하신대로, 컴포넌트 스캔과 @EnableAutoConfiguration 둘 다 @Configuration 클래스를 읽어 빈으로 등록은 하지만 동작 방식이 좀 다릅니다.

좋은 질문 감사합니다.