BeanFactory 和 ApplicationContext 的區別

JMCui發表於2024-10-26

這是 Spring Framework 對 ApplicationContext 的解釋:

The org.springframework.context.ApplicationContext interface represents the Spring IoC container and is responsible for instantiating, configuring, and assembling the beans. 

ApplicationContext 代表 Spring 的 IOC 容器,負責例項化、配置和組裝 bean。

Spring Framework 把 ApplicationContext 稱為容器,其實不是太準確,真正的容器應該是 org.springframework.beans.factory.BeanFactory,不過 ApplicationContext 是 BeanFactory 的子介面,並提供 AutowireCapableBeanFactory 的引用,這樣 ApplicationContext 就擁有了 Bean 讀取和裝載的能力,因此,一般也籠統的稱 ApplicationContext 為容器

再回到區別上來,這是 Spring Framework 的描述:

In short, the BeanFactory provides the configuration framework and basic functionality, and the ApplicationContext adds more enterprise-specific functionality. 
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
		MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
}

可以看到 ApplicationContext 還擴充套件了其它介面,提供了其它功能:

  • 透過 MessageSource 提供 i18n 國際化支援;
  • 透過 ResourceLoader 提供資源的載入,比如 class path 或系統資源;
  • 透過 ApplicationEventPublisher 對實現了 ApplicationListener 的 bean 進行事件通知;
  • 透過 HierarchicalBeanFactory 載入多個上下文;

相關文章