一.概述
在上一节之中,我们说到了IOC容器,并且说到了BeanFactory.
现在我们来看一下BeanFactory的定义.
我们可以看到BeanFactory定义的方法,核心的方法就是getBean()方法.
也就是说,spring封装了创建Bean的全部过程,用户只需要getBean()就可以了.
那么,之前我们也说到了spring通过配置信息知道用户需要创建什么样的Bean,那么我们后面的一个核心就是学会配置.
二 .ApplicationContext
Beanfactory实际上定义了IOC容器的基本形式,对于程序员来说,一般情况下是不会使用BeanFactory这样底层的容器的.
spring为我们提供了ApplicationContext,含义是应用上下文.
上下文在编程中一般的含义就是包含当前运行信息的环境.因此,我们一般也将ApplicaitonContext视为IOC容器.
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
上面是ApplicationContext的定义,我们看到其实际上继承了BeanFactory,同时还继承了其它的接口.
如 MessageSource,ApplicationEventPublisher等接口,也就是说ApplicaitonContext具有了国际化和事件的能力,这些都是后面我们需要说的.
做为程序员,我们经常使用的都是该接口的子类:
如:
ClassPathXmlApplicationContext //从类路径下加载配置信息
FileSystemXmlApplicationContext //从文件系统加载配置信息
AnnotationConfigApplicationContext // 注解式环境
我们看到,子类只是获取配置信息的方式不同,同时还提供了环境下一些特殊行为.
三 .BeanFactory和ApplicaitonContext
这是一个老生常谈的问题,首先
[1]BeanFacoty是IOC的顶层接口,定义了IOC容器的一般行为.
[2]ApplicationContext继承了BeanFactory,同时继承了其它的接口,如时间,国际化等接口,也就是说拥有的能力比BeanFactory更强.
[3]BeanFactory是spring底层使用的,ApplicaitonContext才是程序员应该使用的接口.
[4]加载时机的问题,ApplicaitonContext会初始化所有的单例Bean,这个问题我们后面会重点说明.