묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
@Autowired를 제거해도 의존 관계 주입이 가능한지
[질문 내용]질문 1.ComponentScan과 Autowired를 이용한 스프링 빈 등록 과정을 다음과 같이 이해해보았는데 틀린 내용이 있을까요? 특히 2,3,4 과정이 자세히 알고 싶습니다. @Component 애노테이션이 달린 클래스의 이름을 갖는 빈( 빈 껍데기 )을 등록빈으로 등록된 클래스의 생성자를 실행이 때 생성자의 매개변수가 적은 순서대로 실행 ( MemoryMemberRepository,RateDiscountPolicy -> MemberServiceImpl -> OrderServiceImpl )@Autowired 애노테이션이 달려있다면 생성자의 매개변수 클래스 타입을 확인한다. 해당 클래스 타입을 등록되어 있는 스프링 빈에서 가져온다.생성자를 실행하여 의존 관계 주입을 받은 인스턴스를 등록되어 있는 빈에 넣는다. 질문 2 .3~4 과정에서 @Autowired 애노테이션이 없다면 의존 관계 주입이 이루어지지 않을 것이라고 생각해서 MemberServiceImpl에 @Autowired를 제거해보았는데 MemoryMemberRepository 빈을 알아서 가져와서 의존관계 주입을 받게 되는데 어떻게 주입 받는 것인지 궁금합니다. Dependencies Diagram을 확인해보았더니 @Autowired를 통해서 주입 받는 orderServiceImplr과는 다르게 depends on 이라고 적혀있는데 MemoryMemberRepository가 @ComponentScan으로 빈으로 등록되어서 스프링이 자동으로 알맞은 의존 관계 주입을 해준 것인가요?
-
미해결스프링 핵심 원리 - 기본편
빈으로 등록하지 않았는데 @Autowired를 통해 의존성 주입할 때 충돌이 납니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 @Autowired를 사용해 의존성 주입을 하다 충돌이 나서 질문드립니다.MemberRepository인터페이스 -> MemoryMemberRepository 구현체후자에만 @Component를 붙인 상황입니다.그런데Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/minsung/Desktop/study/core/out/production/classes/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository이런식으로 memberRepository 또한 빈으로 등록되어 있었습니다.@Autowired가 클래스 타입으로 조회한다는 것은 알고 있지만 빈으로 등록되어있는 애들 중에서 조회하는 것 아닌가요...?왜 memberRepository를 빈으로 등록하지 않았는데 빈으로 등록되어있는지@Autowired는 왜 빈으로 등록되지도 않은 memberRepository를 찾을 수 있었는지@Autowired 보다는 @RequiredArgsConstructor 사용을 권장하던데 이제 @Autowired는 잘 쓰이지 않는 것인지궁금합니다!