스프링으로 전환하기
지금까지는 순수한 자바 코드만으로 DI를 적용했다. 이제 스프링을 사용해보자.
AppConfig 변경
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
public class MemberApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
//
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("new member: " + member.getName());
System.out.println("findMember: " + findMember.getName());
}
}
=>
"스프링 컨테이너"
ApplicationContext 를 스프링 컨테이너라 한다.
기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스프링 컨테이너를 통해서 사용한다.
스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용한다. 여기서 @Bean 어노테이션이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 컨테이너에 등록된 객체를 스프링 빈이라 한다.
스프링 빈은 어노테이션이 붙은 메서드 이름을 빈 이름으로 사용한다. (메서드 이름으로 getBean)
이전에는 개발자가 필요한 객체를 직접 호출했으나 이제부터는 스프링 컨테이너를 통해서 필요한 객체를 찾을 수 있다.
코드가 더 복잡해진 거 같은데, 장점이 있을까?
* 인프런 '스프링 핵심 원리 -기본편' 강의를 참고하여 작성했습니다.
'웹 개발 > Spring' 카테고리의 다른 글
[Spring 기본] 컨테이너에 등록된 모든 빈 조회 (0) | 2024.08.20 |
---|---|
[Spring 기본] 스프링 컨테이너 생성 (0) | 2024.08.20 |
[Spring 기본] IoC, DI, 컨테이너 (0) | 2024.08.13 |
[Spring 기본] 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2024.08.13 |
[Spring 기본] 새로운 구조와 할인 정책 적용 (0) | 2024.08.13 |