지금까지 순수한 자바 코드만으로 DI를 적용했으며, 스프링으로 전환을 해보자.!
1) AppConfig.java 수정
- @Configuration : 스프링에게 설정 정보를 제공해 주자.
- @Bean : 스프링 컨테이너에 해당하는 빈을 등록해주자.
package hello.core;
import hello.core.discout.DiscountPolicy;
import hello.core.discout.RateDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
}
- 실행 시 로그를 보게 되면 위와 같이 Spring 라이브러리를 등록한 다음 Spring 컨테이너에 함수명이 빈으로 등록되는 것을 확인할 수 있다.
2) Spring 컨테이너에 등록된 빈을 불러오자.
- 우리는 이제 스프링 프레임 워크가 제공해주는 클래스를 통해서 객체를 사용 할 수 있다. (DI를 통해서)
- ApplicationContext를 스프링 컨테이너라 한다.
- ApplicationContext은 인터페이스다.
- applicationContet에 Annotation기반의 Config를 사용하겟다고 선언하였다.
package hello.core;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.Order;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class OrderApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
Long memberId = 1L;
Member memberA = new Member(memberId, "memberA", Grade.VIP);
memberService.join(memberA);
Order order = orderService.createOrder(memberId,"itemA", 100000);
System.out.println("Order = " + order.toString());
}
}
결론
순수 자바로 구현했던 것을 Spring으로 구현중이며, Spring 컨테이너에 빈으로 등록할 때 주의할 점을 자세하게 알아보도록 하겠다.
이 글은 인프런의
제목 : 스프링 핵심원리 기본편
강사 : 김영한 님의 동영상을 참조해 만들었습니다.
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈 - 다양한 설정 형식 지원 - XML로 AppConfig 설정하기 (0) | 2022.03.15 |
---|---|
스프링 컨테이너와 스프링 빈 - BeanFacotry와 ApplicationContext (0) | 2022.03.15 |
AppConfig 리팩터링 (0) | 2022.03.14 |
스프링 핵심 원리 이해 - 예제 만들 (0) | 2022.03.11 |
스프링 핵심 원리 - 기본편 - 객체 지향 설계와 스프링 (0) | 2022.03.11 |