看了很久的SpringAOP源码,现在对其实现有了一定了解,在此进行一下总结,废话不多说,现在开始:
首先先要理解几个概念,这几个概念正好对应着框架里面的class,这些概念都是我自己定义的,所以不是很准确:
1.Bean工厂:对应着源码中的BeanFactory,是AOP的灵魂,提供了所有获取实例的方法
2.上下文:对应着源码中的ApplicationContext,是AOP工厂的直接调用者,可以认为是对工厂的扩展和封装,为其增加了许多功能
3.读取本地资源:对应着源码中的BeanDefinitionReader,可以读取各种不同形式的配置信息
4.配置文件解析:对应着源码中的DocumentLoader,将配置信息转换为内存信息,其内部就是我们传统的解析xml文件的实现
5.bean配置解析::对应着源码中的BeanDefinitionDocumentReader,bean的解析处理执行者,里面跑着各种循环
6.:定义解析规则:对应着源码中的BeanDefinitionParserDelegate,根绝规则做的各种解析方法,由BeanDefinitionDocumentReader直接传参调用
接下来,以次看他们的具体内容
一、Bean工厂
首先整体的看一下类图
注:SimpleAliasRegistry继承SingletonBeanRegistry的线画错了,应该是DefaultSingletonBeanRegistry继承SingletonBeanRegistry
下面对这几个接口和实现做一下说明:
interface
- BeanFactory:bean的获取接口,包括获取bean,判断bean的特性等方法
- ListableBeanFactory:继承自BeanFactory,是factory的扩展,定义了很多批量的获取方法
- HierarchicalBeanFactory:同样继承自BeanFactory,正如其名定义了获得父工厂的方法
- AutowireCapableBeanFactory:同样继承自BeanFactory,是自动加载的扩展接口
- SingletonBeanRegistry:单例模式bean的注册接口,定义了对单例bean的注册,获取,判断等方法
- AliasRegistry:别名注册接口
首先先要说明两个实现类,图中的接口SimpleAliasRegistry继承画错了,应该画在是下面这个方法的
class
- SimpleAliasRegistry:AliasRegistry的实现类
- DefaultSingletonBeanRegistry:继承了SimpleAliasRegistry类,实现了SingletonBeanRegistry接口,但是addSingletonFactory这个方法的意思现在还不太明白,先做个标记
介绍完这两个类回来继续说接口
interface
- ConfigurableBeanFactory:继承了接口HierarchicalBeanFactory和SingletonBeanRegistry,HierarchicalBeanFactory接口甚至BeanFactory接口都只定义了属性的获取方法,而没有设置方法,ConfigurableBeanFactory就是扩展了其大部分定义方法和一些特殊方法
- ConfigurableListableBeanFactory:继承了ListableBeanFactory,AutowireCapableBeanFactory,ConfigurableBeanFactory接口的同时也扩展了一些方法,但单从名字上还不知道是做什么的
- BeanDefinitionRegistry:继承自AliasRegistry,是bean定义注册的接口
基本上所有接口都已介绍完毕,下面看看他们的实现
- FactoryBeanRegistrySupport:抽象类,继承自DefaultSingletonBeanRegistry类,从源码上看应该是增加了bean的缓存功能,但是定义成抽象类说明还需要下面实现类的支持
- AbstractBeanFactory:抽象类,继承了FactoryBeanRegistrySupport,并实现了ConfigurableBeanFactory接口,实现了bean的获取方法
- AbstractAutowireCapableBeanFactory:抽象类,继承了AbstractBeanFactory,实现了AutowireCapableBeanFactory接口,实现了自动加载,增加了缓存功能
- DefaultListableBeanFactory:第一个正式的使用类,继承自AbstractAutowireCapableBeanFactory,并且又实现了ConfigurableListableBeanFactory和BeanDefinitionRegistry接口
- XmlBeanFactory:继承自DefaultListableBeanFactory,可以加载xml的配置文件,但是已经不建议被使用了
到此,beanfactory的所有类就已经介绍完了,当然对于他内部的方法还有很多不了解,beanfactory是配合ApplicationContext使用的,而beanfactory的直接使用者就是ApplicationContext,所以去认识ApplicationContext的架构是了解beanfactory中方法的含义最好方法
下面将对ApplicationContext总结
未完待续....