본문 바로가기
SpringFramework/Spring 중요 개념

[Spring] 스프링으로 변환하기

by 쭈봉이 2021. 12. 15.

스프링 변환 관련 애노테이션

  • @Configuration: 애플리케이션의 구성정보를 담당하는 파일이라고 명시
  • @Bean: 명시된 멤버들이 스프링 컨테이너에 등록된다.

 

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

 

스프링 컨테이너

ApplicationContext를 스프링 컨테이너라고 한다.

기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만,

이제부터는 스프링 컨테이너를 통해서 사용한다.

스프링 컨테이너는 @Configuration이 붙은 AppConfg를 설정(구성)정보로 사용한다.

여기서 @Bean이라고 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.

이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.

스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다 

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

기존에는 개발자가 직접 자바코드로 모든것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.

    public static void main(String[] args) {
//        AppConfig appConfig = new AppConfig();
//        MemberService memberService = appConfig.memberService();

        // AppConfig를 스프링의 Config 파일로 지정 및 생성된 객체를 관리
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        // Config에서 memberService(메소드이름)을 꺼내오겠다 , 반환 타입
        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());
        //실행시 아래와 같이 @Bean을 인스턴스로 생성해준다.
//        02:55:00.299 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
//        02:55:00.303 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberRepository'
//        02:55:00.315 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'discountPolicy'
//        02:55:00.321 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberService'
//        02:55:00.322 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderService'
    }

 

댓글