inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스프링 통합 테스트

MemberServiceIntegrationTest에서 필드 주입 방식에 @Autowired를 쓰는 이유

415

11 1

작성한 질문수 147

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

강의를 쭉 따라왔습니다.

궁금한 점이 있는데 통합 테스트 클래스인

MemberServiceIntegrationTest에서 필드 주입 방식으로


@Autowired MemberService memberService; @Autowired MemberRepository memberRepository;

 

이렇게 선언했잖아요?

그런데 SpringConfig에서 MemberService랑 MemberRepository를 스프링 빈으로 등록했으니깐

여기서도 @Autowired를 빼도 될 것 같았는데

오류가 나더라구요.

 

이유를 뭔가 알 것 같기도 하면서 개념이 좀 헷갈리는데 @Autowired를 붙여야 하는 이유가 뭔가요?

 

java spring mvc spring-boot

답변 1

1

OMG

안녕하세요. 11 1님, 공식 서포터즈 OMG입니다.

질문에 대한 답변 내용을 비유를 들어 설명드리면 이해하시기에 도움이 되실 것 같아 설명드리겠습니다.

스프링 빈으로 등록한다는 것은 껍데기에 어떤 알맹이가 채워지는지 알려주는 행위라 볼 수 있습니다.

그리고, 주입이라는 것은 껍데기에 알맹이를 채워넣는 행위입니다.

따라서 @Autowired로 필드 주입을 하지 않는다면 껍데기만 만들어놓고 알맹이를 채워넣지 않아 오류가 발생하는 것으로 이해하시면 될 것 같습니다 :)

 

 

감사합니다.

0

11 1

조금 헷갈렸는데 다시 고민해 보니깐 알 것 같기도 합니다. 개념이 제대로 잡히지 않았어서 추가 질문을 좀 이상하게 했었던 것 같네요..;; 그래서 지우고 다시 질문드립니다.

 

기존 강의 방식대로 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를 반드시 해야 하는 거죠?

 

 

..

0

82

2

Unused property.....

0

104

2

project JDK is misconfigured

0

137

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

83

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

232

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

105

2

윈도우 build test오류 질문

1

103

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

102

2

테스트 실행 시 에러 질문

0

294

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

132

1

윈도우 gradlew.bat 에러

0

169

1

@PostMapping("/members/new")가 동작하지 않습니다

0

91

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

128

1

소요 시간

0

89

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

185

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

159

2

index.html Welcome page

0

127

1

프로젝트 gradle-groovy ?

0

377

1

테스트코드 메서드명 한글

0

205

2