본문 바로가기

Spring

[Spring] Spring으로 전환하기

AppConfig Spring 기반으로 변경

기존 AppConfig.java

public class AppConfig {
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

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

    public DiscountPolicy discountPolicy(){
//        return new FixDiscountPolicy();
        return new RateDiscountPolicy();
    }
}

 

변경 후 AppConfig.java

@Configuration
public class AppConfig {
    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }
    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
    @Bean
    public DiscountPolicy discountPolicy(){
//        return new FixDiscountPolicy();
        return new RateDiscountPolicy();
    }
}

 

@Configuration, @Bean 어노테이션을 사용해 스프링 컨테이너에 등록함. 그 후, MemberApp과 OrderApp도 수정한다.

 

MemberApp.java 수정부분

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

 

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

 

이전에는 개발자가 필요한 객체를 'AppConfig'를 사용하여 직접 조회했지만, 이제부터는 메소드를 통해 스프링 컨테이를 통해서 필요한 스프링 빈(객체)를 찾아야 한다. (-> applicationContext.getBean() 메소드 사용)

 

코드가 더 복잡해진 것 같은데, 스프링 컨테이너를 사용하면 어떤 장점이 있을까?

 

 

'Spring' 카테고리의 다른 글

[Spring] 스프링 빈 조회 및 출력  (0) 2024.05.25
[Spring] Spring Container  (1) 2024.05.22
[Spring] AppConfig 역할  (0) 2024.05.22
[Spring] 스프링 특징 - 변경 가능성  (1) 2024.05.22
[Spring] IoC, DI 란?  (0) 2024.05.22