스프링으로 전환하기

(스프링 핵심 원리 → 스프링 핵심 원리 이해까지만 순수 자바로 진행한다)

이제 스프링을 사용해보자.

 

AppConfig

@Configuration      // 애플리케이션의 설정 정보
public class AppConfig {

    @Bean   // 스프링 컨테이너에 등록된다.
    public MemberRepository memberRepository() {    // 객체 생성을 메소드 처리
        return new MemoryMemberRepository();        // 새로운 구현체를 주입 하고 싶다면 new 객체를 수정하면 된다.
    }

    @Bean
    public DiscountPolicy discountPolicy(){         // 객체 생성을 메소드 처리
        //return new FixDiscountPolicy();             // 새로운 구현체를 주입 하고 싶다면 new 객체를 수정하면 된다.
        return new RateDiscountPolicy();
    }

    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
}

 

MemberApp (순수 자바 테스트 코드)

// 순수 자바 코드로 테스트
public class MemberApp {
    public static void main(String[] args) {
//        AppConfig appConfig = new AppConfig();
//        MemberService memberService = appConfig.memberService();

        // AppConfig에 있는 설정 정보를 스프링 컨테이너에 넣어 직접 관리해준다.
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        // applicationContext에서 AppConfig에서 bean으로 등록한 클래스를 가져온다.
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

        // Ctrl + Alt + V - 반환 되는 값에 맞는 인스턴스를 자동 기입
        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("find Member =" + findMember.getName());
    }
}

스프링 컨테이너에 올라간 설정 메소드(스프링 빈)

 

스프링 컨테이너

  • ApplicationContext를 스프링 컨테이너라 한다.
  • 기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만 , 이제부터는 스프링 컨테이너를 통해서 사용한다.
  • 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용한다. 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
  • 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다.
    • @Bean(name=" ") 변경이 가능하긴 하다
  • 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.
  • 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고 , 스프링 컨테이너에서 스프링 빈을 찾아 사용하도록 변경되었다.
  • 코드가 약간 더 복잡해진 것 같은데 , 스프링 컨테이너를 사용하면 어떤 장점이 있을까?

 

 

 

스프링 핵심 원리 - 기본편 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온

www.inflearn.com