inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

탐색 위치와 기본 스캔 대상

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

299

YMMD

작성한 질문수 3

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 빈등록 제외
이렇게되면 깔끔하게 너 하지마 이것만 한다 라는 먼가 질서가 생기는데
 
제가 너무 깊이 생각했나 싶어요,, 죄송합니다
헷갈림으로 인해 헷갈리고 헷갈려서 헷갈려요,,,
 

spring oop

답변 1

1

김영한

안녕하세요. YMMD님

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

감사합니다.

0

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을 무시하는것으로 생각이 들어요

0

ShinS

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

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

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

 

0

YMMD

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

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

코드 자료

0

30

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

51

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

75

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

89

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

81

1

테스트 속도가 나중에 영향이 있을까요?

0

77

1

gradle 설정 안떠서 질문 남깁니다!

0

121

2

build.gradle로 프로젝트를 여는 이유

0

85

1

provider 사용하는 이유

0

88

1

다음 강의 뭘 들어야 할까요

0

126

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

64

1

beanB

0

82

2

퀴즈다시풀기

0

67

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

92

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

66

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

106

2

도메인의 정의?

0

59

1

ApplicationContext 질문입니다.

0

63

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

88

2

ai api 선정하기 관련 질문

0

118

2

생성자 자동주입 관련해서

0

64

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

96

2

Spring에서 SessionScope와 RequestScope는 함께 사용되나요?

1

65

1

12:25

0

77

2