[Spring] ApplicationContext(스프링 컨테이너)

WOOK JONG KIM·2022년 10월 24일
0
post-thumbnail

ApplicationContext

== 스프링 컨테이너

ApplicationContext는 BeanFactory 인터페이스의 하위 인터페이스 -> 즉 ApplicationContext는 BeanFactory에 부가기능을 추가한 것

BeanFactory는 스프링 컨테이너의 최상위 인터페이스 -> 스프링 빈을 관리하고 조회하는 역할

보통 ApplicationContext는 BeanFactory + 부가 기능을 가지기에 자주 사용

ApplicationContext의 구현체(인터페이스를 구현한 클래스)는 여러가지가 있는데, 구현체에 따라 스프링 컨테이너를 XML을 기반으로 만들수도 있고, 자바 클래스로 만들 수도 있다!

-> 빈 등록을 BeanDefinition으로 추상화해서 사용하기 때문에 두 타입중 어느 타입으로 해도 BeanDefinition이 생성

스프링 컨테이너 내부에는 빈 저장소가 존재 -> Key: Bean name, Value : Bean Object

스프링 컨테이너는 기본적으로 빈을 싱글톤으로 관리 해준다 -> 싱글톤 컨테이너라고 불리기도 함

기존 싱글턴 패턴의 문제점(패턴 구현을 위한 코드 추가, 유연성이 떨어짐)은 없어지고, 장점(인스턴스를 생성할 수 없이 단 하나만 생성해서 비용을 줄일수 있다)

스프링 컨테이너 생성하기

@Configuration
public class AppConfig{

	@Bean
    public StationService stationService(){
    	return new StationServiceImpl(stationRepository());
    }
    
    @Bean
    public StationRepository stationRepository(){
    	return new MemoryStationRepository();
    }
    
    @Bean
    // ...
 }

new AnnotationConfigApplicationContext()를 통해 자바 기반 스프링 컨테이너를 만들어 줌
-> Bean 저장소가 생김(자바 설정 클래스를 파라미터로 넘겨줘서 생성)

ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

사용할 땐, 빈 등록 메서드 이름을 통해 객체 가져올 수 있다

StationService stationservice = ac.getBean("stationService", StationService.class);
profile
Journey for Backend Developer

0개의 댓글