인프런 커뮤니티 질문&답변

yosub-kim님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 고급편

예제 프로젝트 만들기 v1

@Import(AppV1Config.class) 질문있습니다.

해결된 질문

작성

·

563

0

안녕하세요. 강사님!

한가지 궁금한 사항이 있어서 질문드립니다.

강의에서 필요한 컴포넌트만 스캔하기 위해서 hello.proxy.app 하위만 scanBasePackages로 설정해주셨는데 

별개로 AppV1Config 클래스를 bean 으로 등록하기 위해서 ProxyApplication 클래스위에 @Import(AppV1Config.class)를 선언하셨었는데, 어떻게 AppV1Config 클래스가 독립적으로 빈으로 등록되는지 상세하게 알수있을까요? 공식 doc을 봐도 이해가 안되네요 ㅠㅠ

AppV1Config 클래스에 적용된 @Configuration 어노테이션을 까보니 @Component 어노테이션이 적용되었지만, 애플리케이션 기동시에는 @SpringBootAppilcation 어노테이션의 scanBasePackages를 hello.porxy.app 하위로 적용했기 때문에 hello.proxy.config 하위에 있는 AppV1Config가 무시되지는 않나 싶어서요

공홈을 보니까 

There's no problem in declaring all the configurations. But imagine the trouble to control dozens of configuration classes within different sources. There should be a better way.

The @Import annotation has a solution, by its capability to group Configuration classes:

이렇게 설명이 되어있는데 혹시 hello.proxy.app 하위로 컴포넌트 스캔을 할 경우 @Import에 있는 Configuration으로 등록되어 있는 AppV1Config 파일도 함께 grouping 되어서 스캔되는 원리일까요?

 

답변 3

2

안녕하세요. yosub-kim님, 공식 서포터즈 David입니다.

Import 애노테이션은 다음과 같이 감지되어 Configration으로 처리됩니다

1. @Configuration이 붙은 클래스(강의에서는 ProxyApplication.class, 이하 설정 클래스)를 감지하여 처리할 때

2. 설정 클래스의 모든 애노테이션을 순회하며 @Import이 있는지 찾습니다.

3. 만약 @Import 이 존재하면 @Import의 value에 해당 하는 클래스를 @Configuration 처리하는 것과 동일하게 처리합니다.

따라서, 컴포넌트 스캔 대상 패키지를 제한했기 때문에 ProxyApplication 클래스에 @Import를 통해 해당 설정 클래스를 사용할 수 있도록 한 것입니다.

감사합니다.

0

안녕하세요 답변에 추가적인 질문이있어. 이어서 질문해도될까요??
scanBasePackage 로 config 폴더의 내부패키지인 AppV1Config 를 제외시켰다고 했는데

설명해주신거로는 AppV1Config 의 어노테이션인 @Configuration 이 먼저 컴포넌트 스캔에 걸려서 @Import 를찾아간다고 되어있는거같습니다.

ProxyApplication에서 Import(ConfigClass => @configuraiton 이 붙은) 가 있어야 해당 Config 클래스에 진입해서 Ioc 에 빈을 생성하는거같은데 아닐까요??

0

yosub-kim님의 프로필 이미지
yosub-kim
질문자

넵넵! 감사합니다. 이해가 됬습니다 ㅎㅎ