Spring

순수 Java에서 Spring으로의 첫 전환!

쿠카이든 2022. 2. 15. 11:50
728x90
  • 순수 Java에서 Spring 코드로 변환
    • 저번에 AppConfig를 활용하여 DI를 구현했는데 이를 스프링 어노테이션으로 구현하면 아래와 같이 바꿀 수 있다.
@Configuration  //AppConfig에 설정을 구성한다는 뜻의 @Configuration 을 붙여준다.
public class AppConfig {
    @Bean  //각 메서드에 @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();
    }
}
  • 스프링 컨테이너
    • ApplicationContext 를 스프링 컨테이너라 한다.
    • 기존에는 개발자가 AppConfig 를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스프링 컨테이너를 통해서 사용한다.
    • 이전에는 개발자가 필요한 객체를 AppConfig 를 사용해서 직접 조회했지만, 이제부터는 스프링 컨테이너 를 통해서 필요한 스프링 빈(객체)를 찾아야 한다. 스프링 빈은 applicationContext.getBean() 메서드 를 사용해서 찾을 수 있다.
public class OrderApp {
    public static void main(String[] args) {

// 스프링으로 바꾸기 전 코드
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
// OrderService orderService = appConfig.orderService();
        
        //스프링 컨테이너 생성 - AppConfig를 관리, 구성한다.
        ApplicationContext applicationContext = new
                AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService =
                applicationContext.getBean("memberService", MemberService.class);
        //컨테이너로부터 객체를 찾아와서 생성하는 부분
        OrderService orderService = applicationContext.getBean("orderService",
                OrderService.class);               
    
    }
}
728x90