异同
- 两者都是通过xml配置文件加载bean,ApplicationContext继承了BeanFacotry接口,而且还继承了其他接口。所以ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。
- BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用
调用getBean()
才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。 - 而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。
在实际开发中用BeanFactory还是ApplicationContext ?
-
ApplicationContext包含了BeanFactory的所有功能。通常建议比BeanFactory优先。
-
如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。
-
所以一般在开发中选择使用ApplicationContext。
总结
- BeanFactory当需要调用时才读取配置信息,生成某个类的实例。如果读入的Bean配置正确,则其他的配置中有错误也不会影响程序的运行。
- ApplicationContext 在初始化时就把 xml 的配置信息读入内存,对 XML 文件进行检验,如果配置文件没有错误,就创建所有的Bean ,直接为应用程序服务。相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。
网友评论