spring源码之旅(1)_BeanFactory与ApplicationContext继承体系
BeanFactory与ApplicationContext继承体系
?????????????????????????????????????????????????????????????
?
BeanFactory接口是Spring ioc容器的核心接口,它提供了从容器获取bean以及bean信息的最基本功能。BeanFactory接口中所定义的几个方法很简单,为了在ioc容器中提供更多的功能,spring框架中提供了许多BeanFactory功能的子接口与实现。按照“单一职责”的设计原则,每一次接口的扩展,将在其原有父接口的基础子上增加新的功能。
ApplicationContext接口是BeanFactory接口的子接口,在包含BeanFactory所提供的全部功能之外,其功能得到了更大的增强,包括各种不同应用层的context实现,国际化消息资源处理,各种不同路径不同类型的资源加载,application Event事件发布等,ApplicationContext能够更加好地满足不同企业应用的各种不同需求。在Spring框架中,ApplicationContext接口也有许多子接口与实现,通过层层扩展与实现,最终ApplicationContext形成了一个功能强大的ioc容器。
?
?
BeanFactory接口继承体系(仅列出一些较核心的接口与类):
?
?

一个接口一个责任,层次非常清晰
查找是否有指定名称的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
?