Spring框架IoC容器的实现类 BeanFactory 和 ApplicationContext 的区别
摘自《JavaWeb开发从初学到精通》P379
Spring的IoC容器就是一个实现了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较多时,程序启动较慢。