BeanFactory和ApplicationContext是Springioc中的重要组件。
Spring通过一个配置文件来描述bean和bean之间的依赖关系,然后利用java的反射功能实例化bean,建立bean之间的依赖关系。
BeanFactory是Spring框架最核心的接口,它提供了高级ioc的配置机制。BeanFactory使得管理不同的java对象成为可能。
ApplicationContext建立在BeanFactory基础之上,提供了更多面向应用的功能,比如,它提供了国际化支持和框架事件体系,更易于创建实际应用。
一般称BeanFactory为ioc容器;而称ApplicationContext为应用上下文,有时为了方便也称为Spring容器。
功能划分:BeanFactory是Spring框架的基础设施,是面向Spring自身的。而ApplicationContext则是面向Spring框架的开发者。
BeanFactory:
BeanFactory是一个类工厂,但和传统的类工厂不一样,传统的类工厂仅负责构造一个或几个类的实例;而BeanFactory是类的通用工厂,可以创建并管理各种类的对象,这些可以被创建和管理的对象本身并没有什么特别,它们仅仅只是一个pojo,Spring称这些创建和管理的java对象为bean。
javabean是需要满足一定规范的,比如,必须提供一个不带参数的默认构造函数或者不依赖于某一特一容器等等。
但在Spring中所说的bean,比javabean的范围更加广泛,所有可以被Spring容器实例化并管理的java类都可以称为javabean。
bean的类体系结构:(1)XmlBeanFactory:主要的方法是getBean(),该方法从容器中返回特定的名称bean,BeanFactory的功能通过其他的接口得到不断扩展;
(2)ListableBeanFactory:定义了接口中访问容器中的bean的基本信息的若干方法,如查看bean的个数、获取某一类型的bean的配置名称或者查看容器中是否包括某一bean等方法;
(3)HierarhicalBeanFactory:此容器可以通过接口方法包含父容器;
(4)ConfigurableBeanFactory:这是一个重要的接口,增强ioc容器的可定制型。它定义了设置类装载器、属性编辑器、容器初始化等方法;
(5)AutowireCapableBeanFactory:它定义了将容器中的bean按照某种规则,比如,按照名称匹配、类型匹配等等来进行自动装配的方法。
(6)SingletonBeanFactory:定义了允许在运行期间向容器注册单实例bean的方法;
(7)BeanDefinitionRegistry:Spring配置文件中每一个bean节点元素,在Spring容器里面都通过一个BeanDefinition对象来表示,它描述了bean的配置信息,而BeanDefinitionRegistry接口提供了向容器手动注册BeanDefinition对象的方法。
装载初始化顺序:(1)创建相关配置文件 (2)spring通过BeanFactory来装载配置文件 (3)启动ioc容器 (4)通过BeanFactory这个方法从容器中获取相关bean实例
ApplicationContext:
ApplicationContext是由BeanFactory派生而来,提供了更多面向实际应用的功能。在BeanFactory中,很多功能要以编程的方式实现,而在ApplicationContext则可以通过配置的方式实现。
ApplicationContext的具体实现类:(1)ClassPathXmlApplicationContext:默认从类路径加载配置文件(2)FileSystemXmlApplicationContext:默认从文件系统中加载配置文件 (3)ConfigurableApplicationContext:新增了启动刷新refresh和关闭应用close两个方法
ApplicationContext的类体系结构/扩展接口:(1)ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能 (2)MessageSource:为应用提供了国际化访问的功能 (3)ResourcePatternResolver:可以通过前缀为ant风格的路径来装载Spring配置文件 (4)LifeCycle:提供了start、stop两大方法控制异步处理的过程
初始化(根据配置文件不同可以选择不同的实现类加载):(1)ClassPathRXmlApplicationContext (2)FileSystemXmlApplicationContext(3)bean的实例化问题