관리 메뉴

취미개발 블로그와 마음수양

BeanFactory 와 ApplicationContext 본문

FrameWork_ETC/Spring

BeanFactory 와 ApplicationContext

아라한사 2015. 11. 15. 18:54

간만에 쓰는 티스토리 블로그...


예. 어쩌다보니 BeanFactory의 lazy loading 과 ApplicationContext를 살펴볼 일이 있어서... 조금 살펴봤습니다.


스프링 레퍼런스 문서에 나와있는 부분이네요..문서를 조금 번역해보자면, 


6.16.1 BeanFactory or ApplicationContext?


별다른 이유가 없으면 `어플리케이션콘텍스트` 를 쓰세요 왜냐하면 어플리케이션 콘텍스트는 `BeanFactory`의 모든 기능을 포함하며 일반적으로 `빈팩토리`보다 추천됩니다. 몇가지 상황을 제외하고는 말이죠.. 여기서의 몇가지 상황은 메모리 소비가 중요하거나 메모리의 적은 몇 킬로 바이트가 차이를 만들어내는 리소스가 제한된 디바이스 내장된어플리케이션에서 실행되는 제약된 상황같은 것들을 말합니다. 


그러나 대부분의 일반적인 엔터프라이즈 어플리케이션 , 시스템에서는 `어플리케이션콘텍스트`가 당신이 원하는 것입니다. . 

스프링은 확장포인트로`BeanPostProcessor`를 엄청나게 사용합니다. 


만약 당신이 단순하게 오직 `빈팩토리`만 사용한다면,  트랜잭션이나 AOP같은 꽤 많은 지원들의 효과가 발생하지 않습니다. 적어도 당신 part의 여분의 단계에서는 말이죠(음?) 이 상황은 혼란스러울 수 있습니다. 왜냐하면 설정에는 아무런 문제가 없기 때문입니다. 
다음 테이블의 기능들은 은 `빈팩토리`와 `어플리케이션콘텍스트`인터페이스의 구현체들에 의해 제공되는 기능들을 말합니다.

 

Table 6.9. Feature Matrix

FeatureBeanFactoryApplicationContext

Bean instantiation/wiring

Yes

Yes

Automatic BeanPostProcessor registration

No

Yes

Automatic BeanFactoryPostProcessor registration

No

Yes

Convenient MessageSource access (for i18n)

No

Yes

ApplicationEvent publication

No

Yes




스택오버 플로우 질문 답변들


다음과 같은 차이가 있다고 합니다... 

빈팩토리는 단순히 빈 초기화, 와이어링을 담당하는데 비해 어플리케이션콘텍스트는 자동 빈PostProsessor 등등 을 등록한다고 합니다. 


답변1

The spring docs are great on this: 3.8.1. BeanFactory or ApplicationContext?. They have a table with a comparison, I'll post a snippet:

Bean Factory

  • Bean instantiation/wiring

Application Context

  • Bean instantiation/wiring
  • Automatic BeanPostProcessor registration
  • Automatic BeanFactoryPostProcessor registration
  • Convenient MessageSource access (for i18n)
  • ApplicationEvent publication

So if you need any of the points presented on the Application Context side, you should use ApplicationContext.


답변2

  1. ApplicationContext is more preferred way than BeanFactory

  2. In new Spring versions BeanFactory is replaced with ApplicationContext. But still BeanFactory exists for backward compatability

  3. ApplicationContext extends BeanFactory and has the following benefits
    • it supports internationalization for text messages
    • it supports event publication to the registered listeners
    • access to the resources such as URLs and files



참조부분

- http://stackoverflow.com/questions/243385/new-to-spring-beanfactory-vs-applicationcontext

- 토비의 스프링 Vol2. 173 : ApplicationContext, BeanFactory

- http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#context-introduction-ctx-vs-beanfactory