1. Spring으로의 전환 

더보기

@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();

     }

 

}

- @Configuration : AppConfig에 설정을 구성한다는 뜻

- @Bean : 각 메서드를 스프링 컨테이너에 스프링 빈으로 등록해줌.

 

더보기

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("find Member = " + findMember.getName());

  }

}

- MemberApp도 Spring으로 소스를 변경해줌.

- 기존 순수한 자바코드에서는 new AppConfig를 해주고, 설정파일의 memberService를 가져와서 사용함.

- 스프링 컨테이너인 ApplicationContext 를 선언하고 이 스프링 컨테이너를 통해서 직접 객체를 생성하고 DI해주면 됨.

- 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용하며, @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 등록된 객체를 스프링 빈이라 함.

- @Bean이 붙은 메서드 명이 MemberService인 경우 스프링 빈의 이름은 memberSerivice가 된다.

- 순수한 자바코드에서는 개발자가 객체를 AppConfig를 사용해서 직접 조회했으나 spring으로 전환하게되면 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾아야 함. applicationContext.getBean() 메서드를 사용해서 찾을 수 있다. 

 

+ Recent posts