Spring框架IoC容器的实现类 BeanFactory 和 ApplicationContext 的区别

摘自《JavaWeb开发从初学到精通》P379

SpringIoC容器就是一个实现了BeanFactory接口的可实例化类。事实上,Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的ApplicationContext。BeanFactory 仅提供了最基本的依赖注入支持,而 ApplicationContext 则扩展了BeanFactory ,提供了更多的额外功能。实例化这两种容器时是有区别的:

(1)BeanFactory

XmlBeanFactory bFactory = new XmlBeanFactory(new ClassPathResource("Spring.xml"));

获取某个类的实例时如下:

BeansDemoClass beans = (BeansDemoClass) bFactory.getBean("beansDemoClass");

(2)ApplicationContext

ApplicationContext aContext = new ClassPathXmlApplicationContext("Spring.xml");
BeansDemoClass bDemoClass = (BeansDemoClass)aContext.getBean("beansDemoClass");

二者对Bean的初始化也有很大区别。BeanFactory当需要调用时读取配置信息,生成某个类的实例。如果读入的Bean配置正确,则其他的配置中有错误也不会影响程序的运行。而ApplicationContext 在初始化时就把 xml 的配置信息读入内存,对 XML 文件进行检验,如果配置文件没有错误,就创建所有的Bean ,直接为应用程序服务。相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

原文地址:https://www.cnblogs.com/lihuiyy/p/2512712.html