天天看点

Spring IOC/DI、AOP 源码详解

思维导图

Spring IOC/DI、AOP 源码详解

思维导图链接

https://www.yuque.com/docs/share/13828bff-6abf-4a12-8970-d4842e8994e3?# 《Spring IOC/DI、AOP 源码详解》

思维导图内容

  • Spring IOC/DIAOP
  • 核心概念
  • BeanDefinition
  • BeanDefinition 中保存了我们的 Bean 信息,比如这个 Bean 指向的是哪个类、是否是单例的、是否懒加载、这个 Bean 依赖了哪些 Bean 等等。
  • BeanDefinitionHolder
  • 这是 BeanDefinition 的包装类,用来存储 BeanDefinition,name 以及 aliases 等
  • BeanFactory & AbstractBeanFactory
  • BeanFactory 是 Bean 工厂,所有的 Bean 都有 BeanFactory 统一创建和管理,Spring 提供了一个 AbstractBeanFactory ,它实现了 BeanFactory 的大部分功能,其中有一个非常重要的方法 getBean() 。
  • BeanFactoryPostProcessor & BeanPostProcessor
  • 如果实现了 BeanFactoryPostProcessor 接口,则在 refresh 方法中调用 invokeBeanFactoryPostProcessors 中创建;如果实现了 BeanPostProcessor 则在 registerBeanPostProcessors 方法中创建。BeanFactoryPostProcessor 可以在实例化 Bean 被拦截调用;BeanPostProcessor 可以再 Bean 完成初始化前后,分别被拦截调用。
  • AnnotationConfigApplicationContext
  • BeanDefinitionRegistry
  • Bean 定义注册器,实际上该接口的实现全部交给了 DefaultListableBeanFactory 实现了
  • AnnotationConfigRegistry
  • 注解配置注册器,用于扫描注解配置
  • DefaultListableBeanFactory(包含)
  • 默认的 BeanFactory 实现
  • IOC 流程基于注解模式
  • register
  • AnnotatedBeanDefinitionReader:用于读取基于注解的 BeanDefinition ,在这个 Reader 创建的过程中,会注册 ConfigurationClassPostProcessor 类,其负责加载配置类中的 BeanDefinition
  • invokeBeanFactoryPostProcessors(beanFactory)
  • 负责调用 BeanFactory 的后置处理方法,所有实现了 这个接口的 Bean,在这个阶段都会调用其 postProcessBeanFactory 方法。
  • registerBeanPostProcessors(beanFactory)
  • 实现了该接口的类,在其他所有类型的 Bean 初始化过程中,会在前后分别回调方法;为用户提供了在 Bean 初始化前后,修改或者扩展 Bean 的机会。
  • finishBeanFactoryInitialization(beanFactory)
  • 主要为实例化所有剩余的单例 Bean;创建过程为:根据 BeanDefinition 中的 classType ,获取其构造函数,根据反射创建 Bean 实例,然后调用 populateBean 方法进行属性设置,最后调用 initializeBean 回调一些与 Bean 生命周期相关的接口方法

参考链接

Spring IoC源码分析(注解版) – 上/中/下

Spring 源码学习 15:finishBeanFactoryInitialization(重点)

Spring IOC 容器源码分析