BeanFactory.md
本文思维导图主要来自于对于Spring框架的源码阅读,以及tiny-spring项目,如果有疏漏的地方,还请不吝指出
相关代码详见Github仓库java-xmind
1. BeanFactory
1.1 IOC
BeanFactory为Spring中关键接口,主要用于读取配置,并获取Bean,思维导图如下所示:
- 其中BeanDefinition的CRUD由BeanDefinitionRegistry接口定义
- BeanPostProcessor负责对Bean进行增强
其中构造函数会实例化对应的BeanDefinitionReader,用于获取BeanDefinition,主要是对应数据源的解析,例如XMLBeanFactory就会使用XML解析,如Xpath
BeanFactory核心函数getBean(name),这部分需要解决一个循环依赖的问题,如A与B互相持有引用;
1.2 AOP
Spring中用于进行Bean增强的主要为BeanPostProcessor,AOP也在此处介入,Spring中AutoProxyCreator负责增强对应的Bean;
Spring中的AOP采用AspectJ风格,具体实现类为AspectJAwareAdvisorAutoProxyCreator,其思维导图如下:
其中AspectJ定义了一套AOP方便的标准,具体如下:
1.3 ApplicationContext
ApplicationContext是建立在BeanFactory接口之上的更高阶的接口,除了BeanFactory之外,它还提供了:
- 事件机制
- 标识描述
- 对BeanFactory的增强机制BeanFactoryPostProcessor,是工厂模式又一应用
- 配置环境信息
ApplicationContext的构造函数
ApplicationContext的核心方法为refresh方法,其方法思维导图如下,ApplicationContext中的postProcessBeanFactory默认为空实现,invokeBeanFactoryPostProcessors中的BeanFactoryPostProcessors默认也为空数组:
obtainFreshBeanFactory与prepareBeanFactory负责获取一个新的BeanFactory并进行必要的准备
invokeBeanFactoryPostProcessors的实现如下,注意BeanPostProcessor下还有BeanFactoryPostProcessor,相应的调用顺序也按照以下方式来:
- PriorityOrdered
- Ordered
- 普通
2. SpringMVC
SpringMVC是基于Servlet规范的框架,其核心为DispatcherServlet
3. SpringBoot
SpringBoot在ApplicationContext的基础上:
- 增加空方法实现,如postProcessBeanFactory,onRefresh
- 增加了BeanFactoryPostProcessor,分别对BeanFactory进行增强
其中SpringBoot注册了一个BeanDefinitionRegistryPostProcessor,ConfigurationClassPostProcessor负责进行组件扫描,以及配置类的解析
完善中
参考资料:
- tiny-spring
掘金[掘金专栏][https://juejin.im/user/5cd151125188254603699f2d/posts]