• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

스프링컨테이너의 동작 순서와 autowired어노테이션

23.05.29 21:45 작성 23.05.30 01:48 수정 조회수 560

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

1 . 컴퍼넌트 스캔 및 autowired어노테이션을 사용할 때 스프링컨테이너 파라미터로 넘겨진 설정클래스의 컴퍼넌트스캔 어노테이션을 통해 스프링 컨테이너가 컴퍼넌트가 붙은 클래스를 빈으로 모두 등록한 후에 스프링컨테이너가 의존관계주입을 하는 단계에서 autowired를 통해 의존관계주입을 하자나요 근데 스프링컨테이너가 이 autowired어노테이션을 어떤식으로 찾는건가요?

 

2 . 스프링컨테이너는 빈을 다 등록한 후에 의존관계주입이 이루어진다하셨는데 memberSerivceImpl 랑 orderServiceImpl의 의존관계주입을 둘 다 수정자방식으로 autowired어노테이션을 붙여서 수정자에다 모두 콘솔을 넣고(memberimpl의 수정자메서드에는 콘솔 1 order에는 콘솔2) 실행시켜봤는데 로그에 autoConfig rateDiscountPolicy memberServiceImpl memoryMemberRepository 1 orderServiceImpl 2 이런식으로 나오는데 위에 논리라면 1이 orderService까지 다 생성된후에 1이 나와야하는거 아닌가요??

3 . 위랑 비슷한 예인데 수동(config,Bean)을 이용할때에도 원래는 스프링컨테이너가 빈을 다 등록한뒤에 의존성주입이 이루어진다고 하셨는데 이것저것 해봐서 로그를 봤는데 로그는 빈을 등록하면서 의존성주입에 필요한 빈을 등록하고 의존성주입이 이루어지는 방식으로 되던데 이것도 이해가 잘 안됩니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.05.31

안녕하세요, 권용준 님. 공식 서포터즈 y2gcoder 입니다.

간단하게 말씀드리자면 스프링 컨테이너는 시작할 때 먼저 모든 빈을 스캔한 후
BeanDefinition이라는 빈에 대한 메타정보를 저장하는 객체들을 만들고, 그에 따라 먼저 빈을 쭉 생성합니다. 그 후에 리플렉션 API를 이용해서 동적으로 의존성 주입을 해주고 있습니다. 그렇기 때문에 말씀하신 결과가 나오지 않았나 생각합니다.

참고할만한 링크를 아래에 적어드리겠습니다. 한 번 보시고 부족하시다면 BeanDefinition, DI, Reflection API 등을 조합해서 검색해보시는 것을 추천하겠습니다.

https://kellis.tistory.com/70

https://dev-monkey-dugi.tistory.com/87

https://taes-k.github.io/2021/05/23/spring-di-reflection/

https://mysterlee.tistory.com/74

https://beststar-1.tistory.com/40

감사합니다.

권용준님의 프로필

권용준

질문자

2023.06.01

그럼 빈을 다 등록한 후에 의존성주입이 이루어지는건 정적인 주입이 이루어질떄 성립되는 조건인가여?

권용준님의 프로필

권용준

질문자

2023.06.01

제가 오해가 있는건지 모르겠는데 빈을 생성하는 단계와 의존성주입의 단계가 나뉘어져있다는게 빈을 무조건 다 생성하고 의존성주입이 이루어진다는건가요?

y2gcoder님의 프로필

y2gcoder

2023.06.02

그럼 빈을 다 등록한 후에 의존성주입이 이루어지는건 정적인 주입이 이루어질떄 성립되는 조건인가여?

=> 정적인 주입이 스프링의 빈 초기화 시 의존성 주입이 일어나는 것을 말씀하시는 것이라면 맞다고 생각합니다. 빈 초기화 단계에 의존성 주입이 일어나기 때문입니다. 위에 참고 글에도 나와있습니다.

제가 오해가 있는건지 모르겠는데 빈을 생성하는 단계와 의존성주입의 단계가 나뉘어져있다는게 빈을 무조건 다 생성하고 의존성주입이 이루어진다는건가요?

=> 해당 부분은 https://beststar-1.tistory.com/40 글의 도표에서 보이는 Dependency Tree에 따라 다를 것 같습니다. 중요한 것은 빈에 의존성을 주입하기 위해서는 대상이 되는 빈이 생성된 이후여야 한다는 것이라고 생각합니다.