카테고리 없음

[spring] spring 등록, 조회 (스프링 핵심 원리-기본편 from 김영한 강사님)

Lord DEVader 2023. 8. 23. 15:49
System.out.println("이 게시물은 김영한님의 스프링 핵심 원리-기본편을 참조하였습니다.");
https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55337&tab=curriculum

 

요약 : 스프링 컨터에너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록.

 

스프링 컨테이너에 등록

1. AppConfig클래스에서 @Configuration 을 붙여 설정 정보로 사용한다.

2. 메서드에 @Bean 을 붙여준다 -> 해당 메서드들은 모두 호출되어 반환된 객체들이 스프링 컨테이너에 등록된다. (A.K.A 스프링 빈)

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

}

 

스프링 컨테이너에서 조회

1. 애플리케이션 콘텍스트 객체 생성 

ApplicationContext applicationContest = new AnnotationConfigApplicationContext(AppConfig.class);

2. getBean()함수로 '스프링빈 객체' 가져오기

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

 

 public static void main(String[] args) {

//이전의 AppConfig를 사용하던 방식
//        AppConfig appConfig = new AppConfig();					
//        MemberService memberService = appConfig.memberService();
//        OrderService orderService = appConfig.orderService();

//스프링 컨테이너에서 꺼내오는 방식
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
        OrderService orderService = applicationContext.getBean("orderService", OrderService.class);


        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);

        System.out.println("order = " + order);

    }