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

简介: 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

相关文章
|
2月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
375 0
|
29天前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
6月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
|
3月前
|
人工智能 监控 安全
Spring AOP切面编程颠覆传统!3大核心注解+5种通知类型,让业务代码纯净如初
本文介绍了AOP(面向切面编程)的基本概念、优势及其在Spring Boot中的使用。AOP作为OOP的补充,通过将横切关注点(如日志、安全、事务等)与业务逻辑分离,实现代码解耦,提升模块化程度、可维护性和灵活性。文章详细讲解了Spring AOP的核心概念,包括切面、切点、通知等,并提供了在Spring Boot中实现AOP的具体步骤和代码示例。此外,还列举了AOP在日志记录、性能监控、事务管理和安全控制等场景中的实际应用。通过本文,开发者可以快速掌握AOP编程思想及其实践技巧。
|
3月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
3月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
7月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
455 70
|
安全 Java Spring
Spring之Aop的底层原理
Spring之Aop的底层原理
|
设计模式 Java uml
Spring AOP 原理
Spring AOP 原理
115 0

热门文章

最新文章

推荐镜像

更多
  • DNS