본문 바로가기

back-end/spring

spring/ 스프링 컨테이너와 스프링 빈

 

* 다음과 같은 AppConfig 클래스가 있다고 가정한다

 

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

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), pointPolicy());
    }

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

    @Bean
    public PointPolicy pointPolicy() {
        return new FixPointPolicy();
    }
}

 

스프링 컨테이너 생성

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

 

ApplicationContext

스프링 컨테이너(인터페이스)

 

new AnnotationConfigApplicationContext(AppConfig.class)

스프링 컨테이너 인터페이스 ApplicationContext를  구현하는 클래스

 

스프링 컨테이너 생성 시 @Cofiguration이 붙은 클래스를 구성 정보로 지정해야 한다. AppConfig.class를 구성 정보로 지정해 스프링 컨테이너를 생성했다.

 

 

스프링 빈 등록

빈 이름 빈 객체
memberService MembgerServiceImpl
orderService OrderSerivceImpl
memberRepository MemoryMemberRepository
pointPolicy FixPointPolicy

스프링 빈은 스프링 컨테이너에 등록된 객체를 말한다.

new AnnotationConfigApplicationContext(AppConfig.class)를 통해 AppConfig.class 의 구성 정보가 넘어오면 AppConfig  에서 @Bean이 붙어 있는 메서드들을 찾아 스프링 빈으로 등록하게 된다.

 

스프링 빈 의존 관계 주입

빈 생성 시 주입되는 의존 관계

스프링 빈 생성 시 자동으로 생성자를 호출하게 되고 호출과 동시에 위와 같이 의존 관계도 주입된다.

 

BeanFactory와 ApplicationContext

BeanFactory

스프링 컨테이너의 최상위 인터페이스

  • 스프링 빈을 관리하고 조회한다
  • getBean()을 제공한다

ApplicationContext

BeanFactory의 모든 기능을 상속 받을 뿐만 아니라 부가적인 기능을 제공한다

  • MessageSource
    • 메시지 소스를 활용한 국제화 기능 제공
  • EnvironmentCapable
    • 로컬, 개발, 운영 들을 구분해서 처리할 수 있는 환경 변수 기능
  • ApplicationEventPublisher
    • 이벤트를 발행, 구독하는 모델을 편리하게 지원
  • ResourceLoader
    • 파일, 클래스 패스, 외부 등에서 리소스를 편리하게 조회

AnnotationConfigApplicationContext

ApplicationContext를 구현한다.