스프링 컨텍스트에는 2가지 종류가 있습니다
1. ApplicationContext
2. BeanFactory
간단하게 설명하면 Application Context는 Bean Factory를 확장했다고 볼 수 있습니다
BeanFactory
BeanFactory 는 org.springframework.beans.factory 안에 정의된 인터페이스입니다
간단하게 bean 이름이나, 타입을 바탕으로 빈을 가져올 수 있는 기능을 가지고 있습니다
Object getBean(String name) throws BeansException;
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
크게 2가지 기능으로 나누어져 있는데요
1. 빈을 가져오는 기능
이름을 바탕으로 가져오기도 하고, 타입을 바탕으로 가져오기도 합니다
이때 빈 스코프에 따라 singleton으로 빈을 관리하기도 하고, prototype 으로 빈을 주기도 합니다
이런 역할을 하는 객체가 BeanFactory 입니다
2. 빈에 대한 정보를 가져오는 기능
이 빈이 특정 이름의 빈이 싱글톤빈인지, prototype 인지에 따라 다른 역할을 하게 됩니다
빈이 특정 타입인지 여부 또한 여기서 볼 수 있습니다
ApplicationContext
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
이렇게 많은 인터페이스를 구현하고 있는데요
1. EnvironmentCapable
Environment 객체를 얻어올 수 있는 인터페이스입니다
2. ListableBeanFactory
스프링은 같은 타입의 객체더라도, Order를 지정해 준다던가, 이름을 지정해 주면 가져올 수 있는데요
이런 과정을 처리할 수 있도록 List 형태로 데이터를 저장하고, 관리할 수 있도록 도와주는 인터페이스입니다
3. HierarchicalBeanFactory
계층 구조로 BeanFactory를 관리할 수 있도록 도와주는 기능입니다
여러 모듈에 각각의 BeanFactory 가 존재할 경우, 상위 모듈의 BeanFactory에 있는 Bean들이 여러 번 만들어질 필요가 없는데, 이를 위해서 사용된다고 합니다
4. MessageSource
국가마다 다른 메시지를 주기 위한 i18n을 도와주는 인터페이스입니다
5. ApplicationEventPublisher
스프링에서 이벤트를 발행할 수 있도록 도와주는 인터페이스입니다
6. ResourcePatternResolver
특정 Path로부터 resource를 불러올 수 있도록 하는 기능을 담고 있는 인터페이스입니다
ApplicationContext vs BeanFactory
BeanFactory는 모든 기능이 Lazy 하게 동작합니다
실제 빈이 요청될 때까지 빈의 생성을 늦추기에, 성능상 이점이 있을 수 있습니다
하지만 실제 다 작동하기 전까지는 어떤 부분에서 문제가 발생하는 것인지를 알 수 없다는 단점이 있기에, 사용하는 경우는 많지 않습니다
ApplicationContext는 시작 시 모든 빈을 다 띄워두고, 작동시킨다는 점이 있습니다
추가적으로 위에 있는 여러 기능들을 가지고 있기 때문에, 이쪽을 사용하는 경우가 훨씬 많다고 합니다
'Spring' 카테고리의 다른 글
공유 자원을 관리하는 bulk head에 대해서 알아보자 (8) | 2023.10.02 |
---|---|
스프링에서 발생한 에러 로그를 슬랙으로 모니터링하는 방법 (1) | 2023.07.08 |
DispatcherServlet 알아보기 - HttpServletBean편 (0) | 2023.04.26 |
Test 의 db 롤백 어디까지 알아보셨나요? (1) | 2023.04.24 |
DispatcherServlet 알아보기 - Servlet 편 (0) | 2023.04.22 |
스프링 컨텍스트에는 2가지 종류가 있습니다
1. ApplicationContext
2. BeanFactory
간단하게 설명하면 Application Context는 Bean Factory를 확장했다고 볼 수 있습니다
BeanFactory
BeanFactory 는 org.springframework.beans.factory 안에 정의된 인터페이스입니다
간단하게 bean 이름이나, 타입을 바탕으로 빈을 가져올 수 있는 기능을 가지고 있습니다
Object getBean(String name) throws BeansException;
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
크게 2가지 기능으로 나누어져 있는데요
1. 빈을 가져오는 기능
이름을 바탕으로 가져오기도 하고, 타입을 바탕으로 가져오기도 합니다
이때 빈 스코프에 따라 singleton으로 빈을 관리하기도 하고, prototype 으로 빈을 주기도 합니다
이런 역할을 하는 객체가 BeanFactory 입니다
2. 빈에 대한 정보를 가져오는 기능
이 빈이 특정 이름의 빈이 싱글톤빈인지, prototype 인지에 따라 다른 역할을 하게 됩니다
빈이 특정 타입인지 여부 또한 여기서 볼 수 있습니다
ApplicationContext
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
이렇게 많은 인터페이스를 구현하고 있는데요
1. EnvironmentCapable
Environment 객체를 얻어올 수 있는 인터페이스입니다
2. ListableBeanFactory
스프링은 같은 타입의 객체더라도, Order를 지정해 준다던가, 이름을 지정해 주면 가져올 수 있는데요
이런 과정을 처리할 수 있도록 List 형태로 데이터를 저장하고, 관리할 수 있도록 도와주는 인터페이스입니다
3. HierarchicalBeanFactory
계층 구조로 BeanFactory를 관리할 수 있도록 도와주는 기능입니다
여러 모듈에 각각의 BeanFactory 가 존재할 경우, 상위 모듈의 BeanFactory에 있는 Bean들이 여러 번 만들어질 필요가 없는데, 이를 위해서 사용된다고 합니다
4. MessageSource
국가마다 다른 메시지를 주기 위한 i18n을 도와주는 인터페이스입니다
5. ApplicationEventPublisher
스프링에서 이벤트를 발행할 수 있도록 도와주는 인터페이스입니다
6. ResourcePatternResolver
특정 Path로부터 resource를 불러올 수 있도록 하는 기능을 담고 있는 인터페이스입니다
ApplicationContext vs BeanFactory
BeanFactory는 모든 기능이 Lazy 하게 동작합니다
실제 빈이 요청될 때까지 빈의 생성을 늦추기에, 성능상 이점이 있을 수 있습니다
하지만 실제 다 작동하기 전까지는 어떤 부분에서 문제가 발생하는 것인지를 알 수 없다는 단점이 있기에, 사용하는 경우는 많지 않습니다
ApplicationContext는 시작 시 모든 빈을 다 띄워두고, 작동시킨다는 점이 있습니다
추가적으로 위에 있는 여러 기능들을 가지고 있기 때문에, 이쪽을 사용하는 경우가 훨씬 많다고 합니다
'Spring' 카테고리의 다른 글
공유 자원을 관리하는 bulk head에 대해서 알아보자 (8) | 2023.10.02 |
---|---|
스프링에서 발생한 에러 로그를 슬랙으로 모니터링하는 방법 (1) | 2023.07.08 |
DispatcherServlet 알아보기 - HttpServletBean편 (0) | 2023.04.26 |
Test 의 db 롤백 어디까지 알아보셨나요? (1) | 2023.04.24 |
DispatcherServlet 알아보기 - Servlet 편 (0) | 2023.04.22 |