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
'Study > [Inflearn] 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[Spring - Inflearn] Spring Bean Scope - 스프링 빈 스코프 (0) | 2021.02.07 |
---|---|
[Spring - Inflearn] Component & ComponentScan & 의존관계 주입 (0) | 2021.01.19 |
[Spring - Inflearn] 웹 애플리케이션과 싱글톤 (0) | 2021.01.17 |
[Spring - Inflearn] IoC & DI, IoC Container & DI Container (0) | 2021.01.10 |
[Spring - Inflearn] Spring & Springboot & 객체 지향 설계 (0) | 2021.01.03 |