AOP源码解析(3)---Spring源码从入门到精通(二十)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: AOP源码解析(3)---Spring源码从入门到精通(二十)

上篇文章主要介绍了beanPostProcessor后置处理器如何注册并创建组件的:

AOP源码解析(2)---Spring源码从入门到精通(十九)


前两篇文章是创建后置处理器(如:AnnotationAwareAspectJAutoProxyCreator)的过程,这篇文章开始创建bean。

finishBeanFactoryInitialization创建单实例bean。

beanFactory.preInstantiateSingletons通过bean工厂创建单实例bean。


一、遍历容器中所有 bean,依次创建。


getBean->doGetBean->getSingleton获取单实例bean,这些前面两篇文章都介绍过了,直接就看getSingleton。

image.png


二、创建bean


   1、先从缓存中获取当前bean,如果能获取到,说明bean已经被创建过,直接使用,否则再创建;(只要被创建好的bean都会被缓存起来,spring保证单实例)

   AnnotationAwareAspectJAutoProxyCreator会在所有bean创建之前会有一个拦截,InstantiationAwareBeanPostProcessor会调用postProcessBeforeInstantiation方法。

    【AnnotationAwareAspectJAutoProxyCreator会在任何bean创建前尝试返回bean】

   2、createBean()

     【BeanPostProcessor是在对象创建完成初始化前后调用的。】

     【InstantiationAwareBeanPostProcessor在创建对象完成之前用后置处理器判断是否有对象返回】

     1)resolveBeforeInstantiation后置处理器里获取对象直接返回,没有获取到,则调用doCreateBean()。这里面有两个方法分别调用postProcessorBeforeInitialization和postProcessorAfterInitialization。

      2)doCreateBean,真正创建bean流程。


三、源码图解


如图先用resolveBeforeInstantiation缓存中获取bean。

image.png

点进去缓存中获取的方法可以看到,从beanPostProcessor中获取,若有直接返回。若没有从缓存中获取,则正式创建bean,运行doCreateBean方法。开始创建bean之后,就和之前说的那样,先populate组件的信息,在初始化组件,初始化前后会调用postProcessorBeforeInitialization和postProcessorAfterInitialization方法,这两个方法也是循环beanPostProcessor获取组件调用的,并且若遇到null,会直接返回。


image.png

image.png

相关文章
|
17天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
20天前
|
搜索推荐 Java Spring
Spring Filter深度解析
【10月更文挑战第21天】Spring Filter 是 Spring 框架中非常重要的一部分,它为请求处理提供了灵活的控制和扩展机制。通过合理配置和使用 Filter,可以实现各种个性化的功能,提升应用的安全性、可靠性和性能。还可以结合具体的代码示例和实际应用案例,进一步深入探讨 Spring Filter 的具体应用和优化技巧,使对它的理解更加全面和深入。
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
7天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
28 9
|
1月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
104 5
|
1月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
1月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
23 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
1月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
22 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
28天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
62 0
|
Java 测试技术 Spring
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成(二)
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成

推荐镜像

更多