inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

예제 프로젝트 만들기 v1

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

해결된 질문

695

yosub-kim

작성한 질문수 3

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 되어서 스캔되는 원리일까요?

 

spring 디자인-패턴

답변 3

2

David

안녕하세요. 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

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

어드바이스 순서 디폴트 기준이 궁금합니다.

0

50

1

AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?

0

77

2

구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?

0

49

1

TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?

0

53

1

Decorator 에서 추상메서드로 뺄때 질문 있습니다.

0

55

1

대상 클래스에 기본 생성자가 없을 때

0

74

1

스프링 부트 버전 4.0 aop 의존성 명칭 변경

1

335

2

final 키워드 사용 관련 질문

0

74

1

안녕하세요

0

63

1

ThradLocal 실무 사례

0

97

2

실무에서의 동시성 문제

0

62

1

로그 등 부가 기능에 대한 테스트코드

0

50

1

ProceedingJoinPoint와 MethodInvocation에 대하여

0

66

1

실무 멀티스레딩에 대한 궁금증

0

69

1

안녕하세요 질문있습니다

0

43

1

AspectV3 aop 실행 순서 문의 드립니다

0

37

1

MDC vs AOP 중에 고민중입니다.

0

74

1

순환참조

0

157

2

this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이

0

77

1

빈 후처리에 등록 질문 있습니다.

0

73

1

AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.

0

86

1

ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?

0

115

2

@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부

0

65

1

ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)

0

69

2