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

gusdn85554님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 기본편

조회한 빈이 모두 필요할 때, List, Map

@Configuration이 붙지 않은 상태에서 @Configuration이 붙은 설정 정보와 같은 원리로 적용되는 이유

21.08.07 19:12 작성

·

196

0

안녕하십니까 강사님

요즘 강사님 스프링 강의를 들으면서 파고드는 재미를 느끼고 있음에 감사합니다.

다름이 아니라 이번 강의에서 DiscountService가 @Configuration이 붙지 않은 상태에서 Annotation~~의 인자로 들어감에도 불구하고, @Configuration이 붙은 설정 정보 클래스와 동일하게 적용이 되는 것을 보고 궁금하여 QnA를 모두 보았습니다. 그래서 아래의 QnA에 대한 답을 보고 파고드는데 제 궁금증이 해소되지 않아 질문드립니다.

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

1. 이건 예외처리인 것 같습니다.

2. 이게 무슨 말인지 몰라 하나하나 레퍼런스를 보면서 해석해보았습니다. 

this.getApplicationStartup()은 applicationStartup형 을 반환하고, applicationStartup의 메서드 start를 사용하여 새 단계를 만들고 시작을 표시한다고 합니다. (무슨 말인진 모르겠지만) 

그래서 start메서드를 사용하면 StartupStep형을 반환한다고 합니다. 여기서 tag메서드를 사용하여 인자로 받았던 componentClasses 내용을 파라미터로 사용한다.?

3. this.reader는 이전 강의에서 배운 스프링이 어떻게 종류별로 BeanDefinition을 읽게 되는지 그 때 배웠었고,  register메서드를 사용하여 componentclasses를 등록한다.

register 메서드를 또 따라가보니 그냥 빈을 등록하는 것 같은데,,

계속해서 파고들었는데도, 왜 @Configuration이 붙지 않은 클래스를 인자로 넣어도 @Configuration이 붙은 설정 정보 클래스와 동일하게 되는지 궁금합니다,, 혹시 제가 잘못된 곳을 파고있었다면,, 혹시 어딜 파야 이 부분을 알 수 있는지 여쭤봐도 될까요?? 

답변 3

1

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

2021. 08. 07. 19:30

 혹시 이게 맞나해서 또 올려봅니다,, 

3번에 있는 register를 쭉 타고 가보니, doRegisterBean이라는 것이 있었습니다.

레퍼런스에서 찾아보니 이름은 달라도 인자가 똑같아서 혹시 같은건가해서 올려봅니다,,

위의 사진이 맞다면, 결국 @Configuration이 붙든 안붙든 인자로 들어가게 되면 

빈으로 등록한다는건가요??

긴 글 읽어주셔서 감사합니다

0

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

2021. 08. 07. 22:34

와,, 그렇다면 테스트에서 DiscountService.class를 파라미터를 넣는 순간  ApplicationContext은 컨테이너 자체이기 때문에 따른 어노테이션이 없어도 그냥 빈 등록이 되는거군요!!

전 강의에서 말씀하셨던 설정 정보 클래스가 인자로 들어가는 순간에 당연히 빈으로 등록된다는 말씀이 떠오릅니다!!

시원하게 이해가 됐습니다!! 정말 감사합니다

강사님 정말 죄송하지만 https://www.inflearn.com/questions/186890

위의 QnA를 보고나서 강사님의 답변을 봤는데, 테스트 코드가 순수 자바 코드로 사용됐다고 말씀하셨습니다.

AnnotationConfigApplicationContext을 사용하는 것이 스프링 부트를 사용한 것이 아닌가요,,??

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

2021. 08. 08. 20:09

네 개발자가 직접 new AnnotationConfigApplicationContext를 사용하는 것은 스프링 부트를 사용하는 것이 아닙니다. 순수 스프링을 개발자가 직접 사용하는 것입니다. main 메서드에 @SpringBootApplication을 통해서 실행하면 스프링 부트가 자동으로 ApplicationContext를 생성해고 사용하는데, 이것이 스프링 부트를 통해서 스프링을 사용하는 방법입니다.

감사합니다.

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

2021. 08. 09. 01:38

주말에도 궁금증을 해결해주시는 답변 정말 감사합니다!!

강의를 두 번째 듣고 있는데, 강의와 같이 발전하는 것 같아 너무 좋습니다!

감사합니다 

0

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

2021. 08. 07. 21:07

안녕하세요. gusdn85554님

이 부분은 간단하게 생각하시는 것이 좋습니다.

스프링 컨테이너를 만들 때 파라미터를 넘겨주면, 해당 클래스를 특별하게 자동으로 스프링 빈으로 등록해주는 기능이 있습니다.

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

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

감사합니다.