004 IOC---IOC容器

一.概述

  在上一节之中,我们说到了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,这个问题我们后面会重点说明.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9090674.html
004