[작성일: 2023. 05. 15]
컴포넌트 스캔과 자동 의존관계 설정
자바 코드로 직접 스프링 빈 등록하기
- 회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애노테이션을 제거하고 진행해야 한다.
XML로 설정하는 방식도 있지만 최근에는 잘 사용하지 않는다.- DI에는 필드 주입, setter 주입, 생성자 주입이 있다.
- 의존관계가 실행중에 동적(런타임 중에 바뀌는 것)으로 변하는 경우는 거의(아마도 99%) 없으므로 생성자 주입을 권장한다.
- setter 주입은 누구나 호출할 수 있게 열리기 때문에 권장하지 않는다.
- 실무에서는 주로 정형화(일반적인) 된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
- 정형화 되지 않거나 상황에 따라 구현 클래스를 변경해야 한다면 설정을 통해 스프링 빈으로 등록한다. ex) 데이터 저장소 미선정 등
- @Autowired를 통한 DI는 helloController, memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
SpringConfig
@Configuration
public class SpringConfig {
@Bean // 스프링 빈 등록으로 이해 -> 등록
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
🐣 출처: 인프런 김영한님 강의
이 글은 인프런의 김영한님 스프링 강의를 보고 작성한 글입니다.
강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.