인프런 커뮤니티 질문&답변
OrderServiceImpl 상속관계 구현체클래스들이 출력되지 않음
작성
·
195
0
public class UserTest {
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
@Autowired
DiscountPolicy discountPolicy;
@Autowired
MemberRepository memberRepository;
@Test
void ConstructTest() {
OrderServiceImpl orderService = new OrderServiceImpl(memberRepository, discountPolicy);
DiscountPolicy discountPolicy = orderService.getDiscountPolicy();
MemberRepository memberRepository = orderService.getMemberRepository();
System.out.println("discountPolicy = " + discountPolicy);
System.out.println("memberRepository = " + memberRepository);
}
}
안녕하세요 선생님! 궁금한게 질문드립니다.
위 코드는 제가 임의로 테스트하기 위한 코드입니다.
AutoAppconfig를 컨테이너에 등록한 상태인데요.
get메서드는 getMemberRepository외에 getDiscountPolicy를 제가 추가한 상황입니다.
위 사진을 보면 파라미터로 각 구현체가 잘 들어간 것같은데 아래 사진과 같이 sout코드 를 통해 출력을 해보면 null로 나옵니다. 왜그런 걸까요??
퀴즈
필드 주입(Field Injection) 방식이 일반적으로 권장되지 않는 이유는 무엇일까요?
불변성을 보장하기 어려워서
의존성 변경이 쉬워서
순수 Java 코드로 테스트하기 어려워서
설정 코드 작성이 복잡해서
답변 3
1
김영한
지식공유자
안녕하세요. yeowuli2님
의존관계 주입은 스프링 빈으로 등록이 되어 있어야만 가능합니다.
코드를 다음과 같이 수정해주세요.
@Test
void ConstructTest() {
// OrderServiceImpl orderService = new OrderServiceImpl(memberRepository, discountPolicy);
OrderServiceImpl orderService = ac.getBean(OrderServiceImpl.class);
DiscountPolicy discountPolicy = orderService.getDiscountPolicy();
MemberRepository memberRepository = orderService.getMemberRepository();
System.out.println("discountPolicy = " + discountPolicy);
System.out.println("memberRepository = " + memberRepository);
}
감사합니다.
1
yeowuli2
질문자
https://drive.google.com/file/d/1xPOz0yb0HzHw4VyFjVWoCWez5rjsPFby/view?usp=sharing
항상 수고하십니다!
0
안녕하세요. yeowuli2님
정확한 문제 확인을 위해
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
https://bit.ly/3fX6ygx
주의: 업로드시 권한 문제 꼭 확인해주세요
감사합니다






연휴에도 불구하고 답변해주셔서 감사합니다 !