인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

JungGyu Oh님의 프로필 이미지
JungGyu Oh

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

자바 코드로 직접 스프링 빈 등록하기

자바 코드로 직접 스프링 빈 등록하기 질문이 있습니다.

작성

·

331

0

안녕하세요, 강의를 듣고 동작 방식에 대해 제가 이해하고 있는것이 맞는지 질문 드리고자 합니다.
 
어노테이션을 활용할 경우
1. 스프링 컨테이너가 동작할때 먼저 컴포넌트 스캔 진행
2. @Component 어노테이션이 달린 클래스를 찾아 빈으로 등록(Service, Controller, Repository 등)
3. @Autowired을 찾아 의존성 주입을 수행함
4. MemberController에 MemberService가 Autowired로 되어있으므로 컨테이너에에 빈으로 올라가있는 MemberService주입
5. MemberService에 Repository부분이 Autowired이므로 컨테이너에 빈으로 올라간 Repository 주입
 
springConfig를 통해 자바코드로 할 경우
1. 컴포넌트 스캔이 진행됨 @Configuration어노테이션에 @Component가 포함되어 있음
2. springConfig를 통해 MemberService, MemberRepository가 Bean으로 등록됨
3. MemberService에 return new MemberService(memberRepository());로 인해 MemberService와 MemberRepository는 의존성이 존재하고, MemberService에 MemberRepository를 주입해 줌
4. MemberController 등록
5. Autowired를 통해 memberService를 등록해야 함
6. 컨테이너에 MemberService 빈이 올라가 있으므로 그것을 등록, MemberService는 이미 3번에서 의존성이 주입되어 있으므로 Autowired가 필요없음
 
이 내용이 맞을까요?
 
감사합니다!

답변 1

1

안녕하세요. JungGyu Oh님, 공식 서포터즈 David입니다.
 
어노테이션을 활용할 경우 
1. 스프링 컨테이너가 동작할때 먼저 컴포넌트 스캔 진행 
2. @Component 어노테이션이 달린 클래스를 찾아 빈으로 등록(Service, Controller, Repository 등) 
3. @Autowired을 찾아 의존성 주입을 수행함
4. MemberController에 MemberService가 Autowired로 되어있으므로 컨테이너에에 빈으로 올라가있는 MemberService주입
5. MemberService에 Repository부분이 Autowired이므로 컨테이너에 빈으로 올라간 Repository 주입 
 
=> 생성자 주입의 경우 생성 되는 과정 속에서 의존관계 주입이 발생하게 됩니다.
 
 
springConfig를 통해 자바코드로 할 경우
1. 컴포넌트 스캔이 진행됨 @Configuration어노테이션에 @Component가 포함되어 있음 
2. springConfig를 통해 MemberService, MemberRepository가 Bean으로 등록됨 
3. MemberService에 return new MemberService(memberRepository());로 인해 MemberService와 MemberRepository는 의존성이 존재하고, MemberService에 MemberRepository를 주입해 줌 
4. MemberController 등록 
5. Autowired를 통해 memberService를 등록해야 함 
6. 컨테이너에 MemberService 빈이 올라가 있으므로 그것을 등록, MemberService는 이미 3번에서 의존성이 주입되어 있으므로 Autowired가 필요없음
 
=> MemberController의 경우 MemberService가 빈으로 등록되어 있어도 @Autowired는 필요합니다. (물론, 스프링 부트의 경우 생성자 주입에 대하여 편의를 위해 @Autowired를 생략할 수 있도록 구현되어 있습니다.) 스프링이 @Autowired를 보고 의존관계를 자동 주입(컨테이너에서 의존관계에 해당하는 빈을 찾아와서 주입)하기 때문입니다.
 
 
질문하신 내용에 대한 더 자세한 내용은 스프링 핵심 원리 - 기본편 컴포넌트 스캔, 의존관계 자동 주입 섹션 강의들을 확인해주세요.
 
감사합니다.
 
 
JungGyu Oh님의 프로필 이미지
JungGyu Oh

작성한 질문수

질문하기