前言
BeanFactory是Spring最核心的接口之一,提供了高级Ioc的配置机制,面向Spring框架本身。ApplicationContext建立在BeanFactory之上,提供了更多面向对象的功能。我们一般称BeanFactory为Ioc容器,ApplicationContext为应用上下文,也称ApplicationContext为Spring容器。
有两种主要的容器系列:
1.实现BeanFactory接口的简单容器系列,这系列的容器只实现了容器的最基本的功能。
2.ApplicationContext应用上下文,它是容器的高级形态,在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。
注:BeanFactory接口说明了IoC容器的最基本的功能规范,它是作为最基本的接口类出现在IoC容器体系中的。在IoC容器中,BeanDefinition是对象间的依赖关系的数据抽象。BeanDefinition也是容器实现依赖注入功能的核心数据结构,依赖注入是通过对BeanDefinition的处理来完成的。
提示:我们必须了解BeanFactory和ApplicationContext之间的区别。
BeanFactory介绍
BeanFactory是一个类工厂,但与传统的类工厂只能创造一种或几种类实例不同的是,BeanFactory可以创建并管理各种类对象,Spring称这些被创建的对象为Bean。
二:以ApplicationContext应用上下文接口为核心,BeanFactory-------》ListableBeanFactory-------》ApplicationContext-------》WebApplicationContext或ConfigurableApplicationContext。ListableBeanFactory接口细化了BeanFactory接口的功能。对于ApplicationContext而言,为了能在Web环境中使用它,设计了WebApplication接口;
BeanFactory最主要的方法是getBean(String beanName),即从容器中获得特定名字的Bean;其他接口通过继承BeanFactory不断扩展BeanFactory的功能。
ListableBeanFactory:访问容器中Bean的基本信息,如查看Bean的个数等;
HierarchicalBeanFactory:父子级联Ioc容器的接口,子容器可以通过接口方法访问父容器;
ConfigurableBeanFactory:重要的接口;
AutowireCapableBeanFactory:定义将容器中的某种规则(如按名字匹配,按类型匹配等)进行自动装配的方法;
SingletonBeanRegistry:定义了运行在容器运行期间注册单实例Bean的接口方法;
BeanDefinitionRegistry:Spring配置文件中,每个<bean>节点在容器中都是用BeanDefinition对象表示的,它描述了Bean的配置信息。BeanDefinitionRegistry提供了向容器注册BeanDefinition的接口方法;
BeanFactory和FactoryBean
FactoryBean:一般情况下,Spring通过反射机制利用<bean>的class属性来实例化类。如果按照传统的方式,则需要在<bean>中提供大量的配置信息。用户可以通过实现FactoryBean接口,定制实例化这个Bean的逻辑。Spring提供了70多个FactoryBean的实现,来隐藏实例化Bean的细节。
从 Spring 3.0 开始, FactoryBean 开始支持泛型,即接口声明改为 FactoryBean<T> 的形式。
BeanFactory:BeanFactory是一个工厂类(接口),它定义了IoC容器的最基本的规范。当然,BeanFactory并不是IoC容器的具体实现。Spring 给出了很多种具体的·实现,如 DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等等。