数组 思维导图_思维导图学Java-Spring(Core,MVC,Boot)

BeanFactory.md

本文思维导图主要来自于对于Spring框架的源码阅读,以及tiny-spring项目,如果有疏漏的地方,还请不吝指出

相关代码详见Github仓库java-xmind

1. BeanFactory

1.1 IOC

BeanFactory为Spring中关键接口,主要用于读取配置,并获取Bean,思维导图如下所示:

  • 其中BeanDefinition的CRUD由BeanDefinitionRegistry接口定义
  • BeanPostProcessor负责对Bean进行增强

b2cc0f976e067280eca3a5e0d26de1de.png

其中构造函数会实例化对应的BeanDefinitionReader,用于获取BeanDefinition,主要是对应数据源的解析,例如XMLBeanFactory就会使用XML解析,如Xpath

75d23a8c4aa91c7332f3c36ebae1ddf8.png

BeanFactory核心函数getBean(name),这部分需要解决一个循环依赖的问题,如A与B互相持有引用;

f42124e1cfb0bf71c38c0f30888990cb.png

1.2 AOP

Spring中用于进行Bean增强的主要为BeanPostProcessor,AOP也在此处介入,Spring中AutoProxyCreator负责增强对应的Bean;

Spring中的AOP采用AspectJ风格,具体实现类为AspectJAwareAdvisorAutoProxyCreator,其思维导图如下:

5885c3e7e02256f3673f6ce8a3b38865.png

其中AspectJ定义了一套AOP方便的标准,具体如下:

9d00e19e2509d029e02568bda34fbcf1.png

1.3 ApplicationContext

ApplicationContext是建立在BeanFactory接口之上的更高阶的接口,除了BeanFactory之外,它还提供了:

  • 事件机制
  • 标识描述
  • 对BeanFactory的增强机制BeanFactoryPostProcessor,是工厂模式又一应用
  • 配置环境信息

fbb02d5128812130b0e6a29cdd06a0f6.png

ApplicationContext的构造函数

9b7385c851e6b1b29b66b6c9a378cdfd.png

ApplicationContext的核心方法为refresh方法,其方法思维导图如下,ApplicationContext中的postProcessBeanFactory默认为空实现,invokeBeanFactoryPostProcessors中的BeanFactoryPostProcessors默认也为空数组:

975d4ce758a26a23300b61e70df4e489.png

obtainFreshBeanFactory与prepareBeanFactory负责获取一个新的BeanFactory并进行必要的准备

a87eca64edeab3a25f77d0cd9a71653d.png

invokeBeanFactoryPostProcessors的实现如下,注意BeanPostProcessor下还有BeanFactoryPostProcessor,相应的调用顺序也按照以下方式来:

  • PriorityOrdered
  • Ordered
  • 普通

95cd1352a81c6a318bd4928b5115cc1b.png

2. SpringMVC

SpringMVC是基于Servlet规范的框架,其核心为DispatcherServlet

627976b5fe59a07790cae271d310042b.png

cfdbf85d80e6c2b64695fa79536f63bb.png

3. SpringBoot

SpringBoot在ApplicationContext的基础上:

  • 增加空方法实现,如postProcessBeanFactory,onRefresh
  • 增加了BeanFactoryPostProcessor,分别对BeanFactory进行增强

57b5331004c5417a0219c395296f944e.png

其中SpringBoot注册了一个BeanDefinitionRegistryPostProcessor,ConfigurationClassPostProcessor负责进行组件扫描,以及配置类的解析

7a3543d1f8d44ab49a523893079a8664.png

完善中

参考资料:

  • tiny-spring

掘金[掘金专栏][https://juejin.im/user/5cd151125188254603699f2d/posts]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值