ApplicationContext 和 BeanFactory
面试:请问ApplicationContext 和 BeanFactory 的区别和联系:
继承关系和功能方面来说:Spring 容器有两个顶级的接口:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能力,而 ApplicationContext属于 BeanFactory 的子类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支持、以及事件传播等方面的支持。
从性能方面来说:ApplicationContext 是一次性加载并初始化所有的 Bean 对象,而BeanFactory 是需要那个才去加载那个,因此更加轻量。BeanFactory是比较轻量化的,但是ApplicationContext是牺牲空间换取性能了,性能更高,但其实现在并不是全部加载而是根据硬件配置,根据多方面具体情况。能够几乎最大限度的找到取舍点,是比较智能的。比如资源足够的时候直接 饿汉模式,一次性加载全部。
ClassPathXmlApplicationContext 属于 ApplicationContext 的子类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。