안녕하세요, 자바 코드로 스프링 빈 등록하기 강좌에서 질문이 있는데요!
세 가지 질문이 있습니다.
1.
@Bean
public MemberService memberService()
{
return new MemberService(MemberRepository());
}
이 뜻은 MemberService와 MemberRepository형의 객체가
의존 관계를 맺고 있다는 뜻이고,
따라서 당연히 MemberService에 가면 MemberRepository형의 멤버변수가 선언되어 있는 걸 볼 수 있는데,
스프링 설정 클래스에서 위와같이 의존관계를 넣어줬으니 MemberService에서는 더이상 @Autowired 어노테이션이 생성자에 필요가 없는 거라고 이해하면 될까요?
조금 더 종합적으로 살펴봤을 때,
컴포넌트 스캔 방식일때는 해당 클래스에서 @Autowired 로 주입받는 객체와의 의존관계를 명시하고 주입해줘야 하는 방법 밖에 없고,
이와 같이 직접 자바 코드로 설정파일 이용해 빈을 등록하는 방식에서는
방법 1 :
수업과 같이 설정클래스에서 위에 작성된 코드로 의존주입한다, 단 저런 방식으로 주입할 경우 MemberService에는 생성자에 @Autowired가 필요없어짐
방법 2 :
@Bean
public MemberService memberService()
{
return new MemberService();
}
로 작성하고 MemberService 클래스에서 필드나 생성자에 @Autowired로 MemberRespository 빈 객체 주입 명시
이렇게 두 가지 방법이 있는 것으로 이해하면 될까요?
2. 잠깐 지나가는 말씀으로 세터 메서드에 @Autowired가 붙는 방법을 알려 주셨는데, 세터 메서드는 개발자가 직접 호출하지 않아도 스프링이 알아서 호출해주나요? @Autowired가 붙은 생성자를 저희가 직접 호출해준적은 없는 거 같은데, 세터도 동일한지 궁금합니다. 즉 @Autowired를 멤버변수 필드나 세터나 생성자에 붙이면 개발자가 호출할 필요 없이 알아서 스프링이 자동호출도 해주고 의존객체도 연결해주는 것으로 이해해도 되는지요?
3. 의존 주입을 하는 객체(A)와, 주입을 받는 객체(B)는 모두 빈으로 등록되어야 하는지 궁금합니다. 주입되는 인자(A)는 꼭 빈으로 등록된 객체여야 오류가 안 난다는 것은 수업에서도 알려주셔서 명확히 기억이 나는데, 주입을 받는 객체(B)도 항상 빈으로 등록된 객체여야 하나요?
질문이 많고 긴데 읽어주셔서 감사합니다!