首页 > 编程语言 >Spring AOP之源码分析

Spring AOP之源码分析

时间:2024-03-19 15:13:56浏览次数:31  
标签:Spring AOP ReflectiveMethodInvocation TransactionInterceptor 源码 aop

  在研究@Enable*注解的应用之:声明式事务@EnableTransactionManagement详解源码时,配置中context装置了一个TransactionInterceptor的bean。对这个类比较好奇因为Interceptor,因为MyBatis功能点之二(1):MyBatis提供的拦截器平台中也分析过interceptor的使用,这个Spring Interceptor是怎样成体系工作的呢?    

      

  从图上可以观察到Advice接口,所以这是Spring AOP实现的增强通知部分。下面从TransactionInterceptor开始倒推逻辑分析Spring AOP的架构:

  1、TransactionInterceptor的加载:

      在@Enable*注解的应用之:声明式事务@EnableTransactionManagement详解中有明确结论——ProxyTransactionManagementConfiguration中Java Bean的方式置于context中。

  2、观察下图:

            

    MethodInvocation与MethodInterceptor实现类相互依赖:

      ReflectiveMethodInvocation使用TransactionInterceptor中的invoke方法,ReflectiveMethodInvocation自己作为invoke方法的参数;

      TransactionInterceptor调用TransactionAspectSupport中的 invokeWithinTransaction方法,参数是ReflectiveMethodInvocation.getMethod——被代理对象,targetclass——代理对象。

    事务处理逻辑封装在invokeWithinTransaction方法中。

  3、在Spring核心思想之 AOP:在自定义容器基础上实现AOP功能实现了功能简单的aop,了解aop的执行在beanpostProcessor中。下面验证下上述事务功能是不是在某个后置处理中调用,确定是哪个后置处理器。

            

  阅读上图中代码可以知道遍历对当前bean,遍历使用processor。通过调试,可知是InfrastructureAdvisorAutoProxyCreator

            

  其类图如下:

            

   在其父类AbstractAutoProxyCreator方法wrapIfNecessary中进行实际aop代理的处理:

            

标签:Spring,AOP,ReflectiveMethodInvocation,TransactionInterceptor,源码,aop
From: https://www.cnblogs.com/ilovebath/p/18082276

相关文章

  • Spring 3升级指导
    一,背景Spring开源多年,已经经过了多次的升级迭代,最新的已经到Spring6了,但是估计大家最常用的还是Spring2.x。 最近项目准备升级到Spring3,下面简单记录一下升级的改动点。二,官方指导1,PreparingforSpringBoot3.02,SpringBoot3.0ReleaseNotes·spring-projects......
  • 基于Java+Vue的人力资源管理系统设计与实现【附源码+文档】
        前言:eHR人力资源管理系统是一个综合性的、用于优化人力资源管理流程的系统。它涵盖了人力资源管理的多个方面,包括招聘、人事、考勤、绩效、社保公积金以及薪酬管理等。以下是关于这些模块的详细解释:一、招聘管理招聘管理是eHR系统的重要组成部分,它可以帮助企业实现......
  • 基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+P
    基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统首页界面图医院信息界面图坐诊信息界面图会员注册界面图个人中心界面图......
  • 基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示网站首页界面图用户注册界面图线下活动界面图交友信息界面图个人中心界面图后台登录界面图管......
  • 基于spring boot框架的发艺美发店管理系统
    摘要系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对发艺美发店管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想,在发艺美发店管理系统实......
  • 基于Spring Boot框架的某火锅店管理系统的设计与实现
    摘要某火锅店管理系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。与安卓,iOS相比较起来,某火锅店管理系统在流畅性,续航能力,等方方......
  • springboot+vue流浪动物宠物救助网站java-ssm
    系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。技术栈ide工具:IDEA或者eclipse编程语言:java数据库:mysql5.7+框架:springboot前端:vue.js+ElementUI详细技术:springboot+vue+MYSQL+MAVEN数据库工具:Navicat/SQLyog都可以前台:﹣动物领养/捐赠:......
  • springboot+vue中药知识科普网站java-ssm
    系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。技术栈ide工具:IDEA或者eclipse编程语言:java数据库:mysql5.7+框架:springboot前端:vue.js+ElementUI详细技术:springboot+vue+MYSQL+MAVEN数据库工具:Navicat/SQLyog都可以前台:﹣首页:展示网站......
  • java基于springboot的羽毛球馆场地预约管理系统ssm
    jdk版本:1.8及以上ide工具:IDEA或者eclipse数据库:mysql 编程语言:nodejs框架:springboot/springboot都有maven:3.6.1前端:layui+bootstrap+jsp详细技术:HTML+CSS+JS+jsp+springmvc+mybatis+MYSQL+MAVEN+tomcat羽毛球馆管理系统采用B/S架构,数据库是MySQL。网站的搭建......
  • java基于Spring boot+vue的小区物业报修缴费居民论坛交流系统ssm
    系统包含两种角色:管理员、用户,系统分为前台和后台两大模块,主要功能如下。技术栈ide工具:IDEA或者eclipse编程语言:java数据库:mysql5.7+框架:springboot前端:vue.js+ElementUI详细技术:springboot+vue+MYSQL+MAVEN数据库工具:Navicat/SQLyog都可以前台:1.首页:展示小区......