[Spring - Inflearn] Spring Container & Bean

728x90
반응형
SMALL

스프링 컨테이너

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

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

기존에는 AppConfig를 통해 직접 객체를 생성하고 DI 했지만, 이젠 스프링 컨테이너를 사용한다.

스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다. (여기서는 AppConfig.class)

@Configuration
public class AppConfig {

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

    @Bean(name="memberRepository")
    public MemoryMemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

}

스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용한다.

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

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

 

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

applicationContext.getBean("bean method name", 반환 객체. class) 을 통해 스프링 빈을 찾을 수 있다.

스프링 빈 - 상속 관계

부모 타입을 조회하면, 자식 타입도 함께 조회한다.

Object 타입으로 조회하면, 모든 스프링 빈을 조회한다.

 

BeanFactory, ApplicationContext

 

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회
  • getBean() 제공

ApplcationContext

  • BeanFactory 기능을 모두 상속받아 제공
  • BeanFactory가 제공하는 빈 관리&제공 외에도 부가 기능을 수행
  • 메시지 소스를 활용한 국제화 기능, 환경변수, 이벤트, 리소스 조회 등

 

 

 

 

 

 

BeanDefinition

BeanDefinition은 빈 설정 메타정보라고 한다.

스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다.

 

728x90
반응형
LIST