Spring/스프링 핵심 원리 - 기본편

스프링 빈 으로 전환하기

코징 2022. 3. 14. 20:31

지금까지 순수한 자바 코드만으로 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 컨테이너에 빈으로 등록할 때 주의할 점을 자세하게 알아보도록 하겠다.

 

이 글은 인프런의

제목 : 스프링 핵심원리 기본편

강사 : 김영한 님의 동영상을 참조해 만들었습니다.