BeanFactory和ApplicationContext都是从 Spring IOC容器中获取 bean 的方法,但仍然存在一些差异。
BeanFactory是实例化、配置和管理许多 bean 的实际容器。这些 bean 通常相互协作,因此它们之间存在依赖关系。这些依赖关系反映在 BeanFactory 使用的配置数据中。
BeanFactory和ApplicationContext都是 Java 接口,ApplicationContext 扩展了 BeanFactory。它们都是使用 XML 配置文件进行的配置。简而言之,BeanFactory 提供基本的控制反转 ( IoC ) 和依赖注入 ( DI ) 功能,而 ApplicationContext 提供高级功能。
一个 BeanFactory 由接口“ org.springframework.beans.factory ”表示,其中 BeanFactory 有多个实现。
ClassPathResource resource= new ClassPathResource("appConfig.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
不同之处
BeanFactory在调用getBean()方法时实例化 bean,而 ApplicationContext 在容器启动时实例化 Singleton bean,它不会等待调用 getBean()。
BeanFactory不提供对国际化的支持,但ApplicationContext提供了对它的支持。
BeanFactory与ApplicationContext之间的另一个区别是能够将事件发布到注册为侦听器的 bean。
BeanFactory接口的流行实现之一是XMLBeanFactory而ApplicationContext接口的流行实现之一是ClassPathXmlApplicationContext。
如果您使用自动布线并使用BeanFactory ,则需要使用 API 注册AutoWiredBeanPostProcessor,如果您使用 ApplicationContext ,您可以在 XML 中进行配置。总之BeanFactory可以用于测试和非生产使用,但ApplicationContext是功能更丰富的容器实现,应该比BeanFactory更受青睐
BeanFactory默认支持延迟加载,ApplicationContext默认支持Aggressive加载。