-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
MemberServiceIntegrationTest에서 필드 주입 방식에 @Autowired를 쓰는 이유
23.09.21 20:07 작성 조회수 148
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
강의를 쭉 따라왔습니다.
궁금한 점이 있는데 통합 테스트 클래스인
MemberServiceIntegrationTest에서 필드 주입 방식으로
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
이렇게 선언했잖아요?
그런데 SpringConfig에서 MemberService랑 MemberRepository를 스프링 빈으로 등록했으니깐
여기서도 @Autowired를 빼도 될 것 같았는데
오류가 나더라구요.
이유를 뭔가 알 것 같기도 하면서 개념이 좀 헷갈리는데 @Autowired를 붙여야 하는 이유가 뭔가요?
답변을 작성해보세요.
1

OMG
23.09.21 21:15
안녕하세요. 11 1님, 공식 서포터즈 OMG입니다.
질문에 대한 답변 내용을 비유를 들어 설명드리면 이해하시기에 도움이 되실 것 같아 설명드리겠습니다.
스프링 빈으로 등록한다는 것은 껍데기에 어떤 알맹이가 채워지는지 알려주는 행위라 볼 수 있습니다.
그리고, 주입이라는 것은 껍데기에 알맹이를 채워넣는 행위입니다.
따라서 @Autowired로 필드 주입을 하지 않는다면 껍데기만 만들어놓고 알맹이를 채워넣지 않아 오류가 발생하는 것으로 이해하시면 될 것 같습니다 :)
감사합니다.

11 1
질문자23.09.21 23:30
조금 헷갈렸는데 다시 고민해 보니깐 알 것 같기도 합니다. 개념이 제대로 잡히지 않았어서 추가 질문을 좀 이상하게 했었던 것 같네요..;; 그래서 지우고 다시 질문드립니다.
기존 강의 방식대로 MemberServiceIntegrationTest에서 필드 주입 방식으로 했을 땐 아래 코드였는데요
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
이걸 생성자 주입 방식으로 바꾼다면
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
private final MemberService memberService;
private final MemberRepository memberRepository;
@Autowired
public MemberServiceIntegrationTest(MemberService memberService, MemberRepository memberRepository) {
this.memberService = memberService;
this.memberRepository = memberRepository;
}
제대로 바꾼 거 맞나요? 제대로 변환하지 않았다면 어디를 수정해야 하는지 궁금합니다. 제가 머릿속에서 헷갈려하는 부분이 있었는데 이거에 대한 답변을 들으면 해소가 될 것 같습니다.
그리고 SpringConfig에 MemberServiceIntegrationTest는 빈으로 등록하지 않았기 때문에 생성자에 @Autowired를 반드시 해야 하는 거죠?
답변 1