* 다음과 같은 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
를 구현한다.
'back-end > spring' 카테고리의 다른 글
spring/ 의존 관계 자동 주입 - 생성자 주입을 사용하자 (0) | 2022.06.20 |
---|---|
spring/ 컴포넌트 스캔 (0) | 2022.06.20 |
spring/ 싱글톤 컨테이너 (0) | 2022.06.20 |
spring/ 관심사 분리SoC, 제어의 역전IoC, 의존 관계 주입 DI (0) | 2022.06.17 |
spring 선수 지식/ 객체지향 SOLID (0) | 2022.06.16 |