728x90
반응형
1. AppConfig를 통해서 구체 클래스를 선택합니다. 애플리케이션이 어떻게 동작할지에 대해 전체적인 구성을 책임집니다.
public class AppConfig {
//멤버에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
public MemberService memberService() {
//MemberService 인스턴스를 생성하고 MySQL을 이용한 MemberRepository 객체의 의존성을 주입합니다.
//다른 DB를 사용하고 싶다면 Repository 를 새로 생성해서 변경 가능합니다.
return new MemberServiceImpl(new MySqlMemberRepository());
}
//투두에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
public TodoService todoService(){
//투두를 생성하는데 필요한 MySQL을 이용한 MemberRepository 객체의 의존성을 주입합니다.
//다른 DB를 사용하고 싶다면 Repository 를 새로 생성해서 변경 가능합니다.
return new TodoServiceImpl(new MySqlMemberRepository());
}
}
2. AppConfig 리팩터링 - MySqlMemberRepository를 다른 구현체로 변경할 때 한 부분만 변경하면 됩니다.
public class AppConfig {
//멤버에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
public MemberService memberService() {
//MemberRepository 중복 제거
return new MemberServiceImpl(memberRepository());
}
//투두에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
public TodoService todoService(){
//MemberRepository 중복 제거
return new TodoServiceImpl(memberRepository());
}
//멤버에 대한 리포지토리를 정의한 인터페이스에 객체 의존 관계 주입
public MemberRepository memberRepository(){
//MemberRepository를 따로 빼서 관리
return new MySqlMemberRepository();
}
}
3. AppConfig 스프링 기반으로 작성합니다. (Annotation 사용)
@Configuration //AppConfig에 설정을 구성한다는 의미입니다.
public class AppConfig {
@Bean //스프링 컨테이너에 스프링 빈으로 등록합니다.
public MemberService memberService() { //멤버에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
//MemberRepository 중복 제거
return new MemberServiceImpl(memberRepository());
}
@Bean //스프링 컨테이너에 스프링 빈으로 등록합니다.
public TodoService todoService(){ //투두에 대한 서비스를 정의한 인터페이스에 객체 의존 관계 주입
//MemberRepository 중복 제거
return new TodoServiceImpl(memberRepository());
}
@Bean //스프링 컨테이너에 스프링 빈으로 등록합니다.
public MemberRepository memberRepository(){ //멤버에 대한 리포지토리를 정의한 인터페이스에 객체 의존 관계 주입
//MemberRepository를 따로 빼서 관리
return new MySqlMemberRepository();
}
}
추가 설명
전에는 필요한 인스턴스를 AppConfig를 사용해서 직접 조회해서 사용했지만,
이제는 스프링 컨테이너를 통해서 필요한 객체(Bean)을 찾아야 합니다.
applicationContext.getBean() 메서드를 사용해서 찾을 수 있습니다.
스프링은 @Bean 어노테이션이 붙은 클래스 정보를 사용해서 Bean을 생성하고,
설정정보(AppConfig)를 참고해서 의존관계 주입(DI)을 합니다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] 관습적인 추상화 (2) | 2022.08.09 |
---|---|
[Spring] 객체 지향 설계의 다섯 가지 기본 원칙 - SOLID (0) | 2022.07.15 |
[Spring] @ComponentScan @Autowired 의존관계 자동 주입 (0) | 2022.07.12 |
[Spring] @Configuration과 Singleton By CGLIB (0) | 2022.07.11 |
[Spring] Singleton 사용 시 필드 변수 사용 주의❗ (0) | 2022.07.11 |