해결된 질문
작성
·
412
0
안녕하세요! 김영한 선생님의 스프링 핵심 원리 강의를 수강하고 있는 학생입니다:)
다름 아니라 setter 주입의 예제 코드와 관련하여 궁금한 점이 생겨서 질문을 남기게 되었습니다.
강의 13:26에 나와있는 코드와 동일하게 setter와 생성자에 화면 출력 기능을 추가하였습니다. 그 결과, AutoAppConfig.class를 설정 정보로 하는 test 클래스를 실행하면 설명해주신 내용과 같이 생성자를 통한 의존 관계 주입이 먼저 일어나고 setter를 통한 의존 관계 주입이 나중에 일어남을 확인할 수 있었습니다.
더 나아가 AutoAppConfig.class가 아닌 AppConfig.class를 설정 정보로 하는 test 클래스를 실행하면 콘솔 화면에 어떤 내용이 출력될지 호기심이 생겨 test.java.hello.core.beanfind 패키지에 위치한 ApplicationContextBasicFindTest 클래스를 실행하였습니다.
실행 전에 저는 orderService라는 이름의 스프링 빈이 등록되는 과정에서 orderServiceImpl() 생성자가 호출되기 때문에 System.out.println("1. OrderServiceImpl.OrderServiceImp"); 코드가 실행될 것이라 예상하였습니다.
또한,
(1) AppConfig.class엔 setMemberRepository()와 setDiscountPolicy()를 호출하는 코드가 없고
(2) AppConfig.class는 @ComponentScan를 사용하지 않기 때문에
setMemberRepository()와 setDiscountPolicy()가 @Autowired를 사용하고 있더라도 의존 관계를 자동으로 주입할 수 없어 해당 메소드(setter) 내부에 기재되어있는 System.out.println("memberRepository = " + memberRepository); 코드와 System.out.println("discountPolicy = " + discountPolicy); 코드는 실행되지 않을 거라 예상했습니다.
답변 감사합니다:)