[스프링 핵심 원리 - 기본편] 스프링 컨테이너

강신현·2022년 8월 18일
0

✅ BeanFactory ✅ ApplicationContext


코드

  • AppConfig
@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();
    }
}
  • main
public class MemberApp {

    public static void main(String[] args) {

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

    }
}

생성 과정

1. 스프링 컨테이너 생성

@Configuration : 구성 정보(AppConfig.class)를 지정

//스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

2. 스프링 빈 등록

@Bean : 스프링 빈 등록

주의 : 빈 이름은 항상 다른 이름을 부여해야 한다.
같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.

3. 스프링 빈 의존관계 설정

스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.


스프링 컨테이너

1. BeanFactory

스프링 빈을 관리하고 조회하는 역할

  • 스프링 켄테이너의 최상위 인터페이스
  • getBean() 을 제공

2. ApplicationContext

BeanFactory 기능을 모두 상속받아서 제공 + 부가 기능 제공

부가기능

  • 메시지소스를 활용한 국제화 기능
    예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
  • 환경변수
    로컬, 개발, 운영등을 구분해서 처리
  • 애플리케이션 이벤트
    이벤트를 발행하고 구독하는 모델을 편리하게 지원
  • 편리한 리소스 조회
    파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

강의 출처

[인프런 - 김영한] 스프링 핵심 원리 - 기본편

profile
땅콩의 모험 (server)

0개의 댓글