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

YMMD님의 프로필 이미지
YMMD

작성한 질문수

스프링 핵심 원리 - 기본편

탐색 위치와 기본 스캔 대상

컴포넌트 스캔관련 질문드립니다 ㅎㅎ

작성

·

237

1

안녕하세요~~ 강의 잘 보고있습니다. 최고의 강사!!
궁금증이 생겨서 질문 드립니다 ㅎㅎ
 
@SpringBootApplication이 붙은 CoreApplication을 통해 동작하면 ComponentScan을 하는데
AppConfig와 AutoAppConfig의 @Configuration이 붙어있잖아요,,
@Configuration을 따라 들어가니까 @Component가 있어서 아 그럼 얘도 컴포넌트 스캔 대상이구나 라고 생각했어요.
그래서 여기서 더 나아가서 생각해보니까 복잡해졌는데요,,,
 
AppConfig와 AutoAppConfig 둘 중 컨테이너에 등록하는 순서가 있나요???
왜이런 질문이 나왔냐면,,, 강의내용 코딩따라했을 때 코드 기준으로 AppConfig는 excludeFilters가 없고 AutoAppConfig에는 excludeFilters로 @Configuration 애노테이션 등록된것을 제외하였는데 먼저 등록하는 순서라는게 존재한다면 순서에 따라 먼가 다를것 같습니다...
 
AppConfig먼저
1. AppConfig의 빈등록절차 진행
2. AutoAppConfig의 빈등록절차를 진행하려고 보니까 @Configuration이 붙은애들을 제외 시켰네? 이미 @Configuration이 붙은 AppConfig빈등록 다 해놨는데 어쩌지
가 될 것 같아서요,,,,
 
AutoAppConfig먼저
1. AutoAppConfig의 exclude로 Configuration했으니 "@Configuration붙은애들 진행시키지마" 가 되겠고
2. 컴포넌트 스캔으로 @Component붙은것들(@Repository, @Controller, @Component 등) 빈등록진행, AutoAppConfig에 @Bean이 붙은 애들 빈등록
3. AppConfig 빈등록 제외
이렇게되면 깔끔하게 너 하지마 이것만 한다 라는 먼가 질서가 생기는데
 
제가 너무 깊이 생각했나 싶어요,, 죄송합니다
헷갈림으로 인해 헷갈리고 헷갈려서 헷갈려요,,,
 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. YMMD님

@SpringBootApplication에는 이미 @ComponentScan 있기 때문에, 여기에서 필요한 스프링 빈들을 다 컴포넌트 스캔 해버려서 문제가 되지는 않을 듯 합니다.

감사합니다.

YMMD님의 프로필 이미지
YMMD
질문자

답글 감사합니다 영한님 ^^

그런데 제가 이해가 잘 안가서 그러는데,,, ㅠㅠ

@SpringBootApplication에서 @ComponentScan이 있기때문에 컴포넌트 스캔 할 것이고, 필요한 스프링 빈들을 찾아서 등록하는데 @Configuration이 있는 AutoAppConfig가 등록이 될 때 어떤식으로 되는지 궁금합니다.. 제가 궁금한점을 순서를 통해서 설명을 드리겠습니다!!

------------------------------------------------------------

순서

1. @SpringBootApplication의 @ComponenetScan으로 컴포넌트스캔

2. AutoAppConfig발견 (AutoAppConfig의 @Configuration으로 인하여)

3. @AutoAppConfig의 @ComponentScan 발견

@Configuration
@ComponentScan(
        basePackages = "hello.core",
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}

------------------------------------------------------------

이 때 AutoAppConfig의 ComponentScan도 진행을 하는건가요?? 아니면 컴포넌트 스캔은 하지않고 AutoAppConfig를 빈등록하고, 내부에 @Bean이 있다면 빈등록 절차를 거치는건가요??

여기서(AutoAppConfig에서) 만약에 ComponentScan을 한다면 ComponentScan 제외조건으로 Configuration이 있다면 무시해버리는지 아니면 어떤식으로 동작하는지가 궁금합니다 ㅎㅎ

만약에 제외조건을 그대로 제외시켜버린다면 AutoAppConfig의 컴포넌트 스캔 대상으로만 @Configuration을 무시하는것으로 생각이 들어요

안녕하세요 같이 공부하는 학생입니다.

저도 약간 의도는 비슷한 질문을 남겼었는데 도움ㅇ ㅣ되길 바래요

https://www.inflearn.com/questions/334415

 

YMMD님의 프로필 이미지
YMMD
질문자

감사합니다 ShinS님, 위 문제는 제가 너무 깊게 생각해서 나왔던, 혼자 꼬임을 만들어버린 질문이었던것 같아요,,,

도움 링크 감사합니다 좋은하루되세요 :)

YMMD님의 프로필 이미지
YMMD

작성한 질문수

질문하기