读书人

spring源码之旅(一)_BeanFactory与App

发布时间: 2012-10-19 16:53:37 作者: rapoo

spring源码之旅(1)_BeanFactory与ApplicationContext继承体系

BeanFactoryApplicationContext继承体系

?????????????????????????????????????????????????????????????

?

BeanFactory接口是Spring ioc容器的核心接口,它提供了从容器获取bean以及bean信息的最基本功能。BeanFactory接口中所定义的几个方法很简单,为了在ioc容器中提供更多的功能,spring框架中提供了许多BeanFactory功能的子接口与实现。按照“单一职责”的设计原则,每一次接口的扩展,将在其原有父接口的基础子上增加新的功能。

ApplicationContext接口是BeanFactory接口的子接口,在包含BeanFactory所提供的全部功能之外,其功能得到了更大的增强,包括各种不同应用层的context实现,国际化消息资源处理,各种不同路径不同类型的资源加载,application Event事件发布等,ApplicationContext能够更加好地满足不同企业应用的各种不同需求。在Spring框架中,ApplicationContext接口也有许多子接口与实现,通过层层扩展与实现,最终ApplicationContext形成了一个功能强大的ioc容器。

?

?

BeanFactory接口继承体系(仅列出一些较核心的接口与类):

?

?

spring源码之旅(一)_BeanFactory与ApplicationContext继承体系

一个接口一个责任,层次非常清晰

查找是否有指定名称的bean,

根据名称获取bean,

根据名称获取所有的别名,

根据名称获取bean的class类型,

根据名称判断bean是否是单例或prototype

???? 判断名称为name的bean是否与指定类型相匹配

查找是否有指定名称bean的定义

获取容器内bean的数量及所有bean的名称

根据指定类型获取bean的集合

通过继承自DefaultSingletonBeanRegistry类,提供了对单例对象的cache缓存

可以根据bean名称,决定对象是prototype还是单例类型

Bean别名的支持

Bean定义RootBeanDefinition和ChildBeanDefinition的合并

FactoryBean创建bean与其本身的支持

Bean析构时调用destroy()方法或其本身配置的销毁方法进行后置处理

实现了HierarchicalBeanFactory接口,支持BeanFactory容器的父子继承关系

本类给其子类留下了三个抽象方法:

boolean containsBeanDefinition(String beanName);

BeanDefinition getBeanDefinition(String beanName);

createBean(String beanName, RootBeanDefinition mbd, Object[] args);

?

?

ApplicationContext接口继承体系(仅列出一些较核心的接口与类):

?

?

??? 设置父ApplicationContext

??? 添加BeanFactory后置处理器BeanFactoryPostProcessor

??? 添加ApplicationListener

??? 获取ApplicationContext内部的BeanFactory(ConfigurableListableBeanFactory类型)

刷新与关闭applicaionContext

注册关闭时的shutdown hook

判断当前applicationcontext是否处于活动(active状态)

此类给子类留下了三个抽象方法:

?????? ConfigurableListableBeanFactory getBeanFactory();

void closeBeanFactory();

void refreshBeanFactory();

此类只留给子类一个抽象方法:

void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)

从beanFactory中加载beanDefinitions。

nAbstractXmlApplicationContext类:继承自AbstractRefreshableApplicationContext类,其内部实现了从xml配置文件中加载和解析beanDefinition

?

读书人网 >软件架构设计

热点推荐