如何通过XML方式配置AOP过程解析

 更新时间:2020年07月15日 11:01:03   作者:jock_javaEE  
这篇文章主要介绍了如何通过XML方式配置AOP过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

第一步:把通知类用 bean 标签配置起来

<bean id="txManager" class="com.atguigu.account.utils.TransactionManager">
  <!-- 注入ConnectionUtils -->
  <property name="connectionUtils" ref="connectionUtils" />
</bean>

第二步:使用 aop:config 声明 aop 配置

aop:config:

作用:用于声明开始 aop 的配置

<aop:config>
</aop:config>

第三步:在使用 aop:config标签里面配置 aop:aspect切面

aop:aspect:

作用: 用于配置切面。 属性:

  • id:给切面提供一个唯一标识。
  • ref:引用配置好的通知类 bean 的 id。

<aop:aspect id="txAdvice" ref="txManager">
<!--配置通知的类型要写在此处-->
</aop:aspect>

第四步:使用 aop:pointcut 配置切入点表达式

aop:pointcut:

作用: 用于配置切入点表达式。就是指定对哪些类的哪些方法进行增强。

属性: expression:用于定义切入点表达式。

id:用于给切入点表达式提供一个唯一标识

<!--配置通用切入点表达式,需要将该标签放置在通知之前-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />

第五步:使用 aop:xxx 配置对应的通知类型

<aop:config>
  <!--配置通用切入点表达式-->
  <aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
  <aop:aspect id="txAdvice" ref="txManager">
    <!--配置前置通知:开启事务-->
    <aop:before method="beginTransaction" pointcut-ref="pt1" />
    <!--配置后置通知:提交事务-->
    <aop:after-returning method="commit" pointcut-ref="pt1" />
    <!--配置异常通知:回滚事务-->
    <aop:after-throwing method="rollback" pointcut-ref="pt1" />
    <!--配置最终通知:释放连接-->
    <aop:after method="release" pointcut-ref="pt1" />
  </aop:aspect>
</aop:config>

六、详细解析

 aop:before 
  作用:  用于配置前置通知。指定增强的方法在切入点方法之前执行  
  属性: 
    method:用于指定通知类中的增强方法名称  
    ponitcut-ref:用于指定切入点的表达式的引用  
    poinitcut:用于指定切入点表达式  
    执行时间点:切入点方法执行之前执行 
  <aop:before method="beginTransaction" pointcut-ref="pt1"/> 


  aop:after-returning 
    作用:  用于配置后置通知 属性:  
    method:指定通知中方法的名称。  
    pointct:定义切入点表达式  
    pointcut-ref:指定切入点表达式的引用 
    执行时间点:  切入点方法正常执行之后。它和异常通知只能有一个执行 
  <aop:after-returning method="commit" pointcut-ref="pt1"/> 


  aop:after-throwing 
     作用:  用于配置异常通知 属性:  
     method:指定通知中方法的名称。  
     pointct:定义切入点表达式  
     pointcut-ref:指定切入点表达式的引用 
     执行时间点:  切入点方法执行产生异常后执行。它和后置通知只能执行一个 
  <aop:after-throwing method="rollback" pointcut-ref="pt1"/>


  aop:after 
     作用:  用于配置最终通知 属性:  
     method:指定通知中方法的名称。  
     pointct:定义切入点表达式  
     pointcut-ref:指定切入点表达式的引用 
     执行时间点:  无论切入点方法执行时是否有异常,它都会在其后面执行。 
  <aop:after method="release" pointcut-ref="pt1"/> 



 aop:around: 
     作用:  用于配置环绕通知 
     属性:  
       method:指定通知中方法的名称。  
       pointct:定义切入点表达式  
       pointcut-ref:指定切入点表达式的引用 
     说明:  它是 spring 框架为我们提供的一种可以在代码中手动控制增强代码什么时候执行的方式。 
     注意:  通常情况下,环绕通知都是独立使用的 

七、环绕通知

 /** 
  * 环绕通知 * @param pjp 
  * spring 框架为我们提供了一个接口:ProceedingJoinPoint,它可以作为环绕通知的方法参数。 
  * 在环绕通知执行时,spring 框架会为我们提供该接口的实现类对象,我们直接使用就行。 
  * @return 
  */ 
  public Object transactionAround(ProceedingJoinPoint pjp) { 
     //定义返回值 
    Object rtValue = null; 
    try {  
    //获取方法执行所需的参数  
    Object[] args = pjp.getArgs(); 
    
    //前置通知:开启事务  
    beginTransaction(); 
    
    //执行方法  
    rtValue = pjp.proceed(args); 
    
    //后置通知:提交事务  
    commit(); 
    }catch(Throwable e) {  
    //异常通知:回滚事务  
    rollback();  
    e.printStackTrace(); 
    }finally { 
     //最终通知:释放资源  
       release(); 
    } 
       return rtValue; 
   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 一文详解如何通过Java实现SSL交互功能

    一文详解如何通过Java实现SSL交互功能

    这篇文章主要为大家详细介绍了如何通过Java实现SSL交互功能,文中的示例代码讲解详细,对我们的学习或工作有一定的帮助,需要的可以参考一下
    2023-04-04
  • JAVA实现DOC转PDF的示例代码

    JAVA实现DOC转PDF的示例代码

    Word作为目前主流的文本编辑软件之一,功能十分强大,但是在传输的时候不稳定,那么如何从DOC转PDF,本文就来介绍一下,感兴趣的可以了解一下
    2021-08-08
  • Nacos配置中心搭建及动态刷新配置及踩坑记录

    Nacos配置中心搭建及动态刷新配置及踩坑记录

    这篇文章主要介绍了Nacos配置中心搭建及动态刷新配置及踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Netty分布式ByteBuf使用subPage级别内存分配剖析

    Netty分布式ByteBuf使用subPage级别内存分配剖析

    这篇文章主要为大家介绍了Netty分布式ByteBuf使用subPage级别内存分配剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • springboot与mybatis整合实例详解(完美融合)

    springboot与mybatis整合实例详解(完美融合)

    大家都知道springboot搭建一个spring框架只需要秒秒钟。下面通过实例代码给大家介绍一下springboot与mybatis的完美融合,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • eclipse汉化及jdk安装环境配置超详细教程(Java安装教程)

    eclipse汉化及jdk安装环境配置超详细教程(Java安装教程)

    这篇文章主要介绍了eclipse汉化及jdk安装环境配置超详细教程(Java安装教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java中ThreadLocal的用法和原理详解

    Java中ThreadLocal的用法和原理详解

    这篇文章主要为大家详细介绍了Java中ThreadLocal的用法和原理,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-04-04
  • Springboot如何根据实体类生成数据库表

    Springboot如何根据实体类生成数据库表

    这篇文章主要介绍了Springboot如何根据实体类生成数据库表的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Mybatis-plus更新Null字段的四种方法

    Mybatis-plus更新Null字段的四种方法

    在项目开发过程中,经常会使用Mybatis-plus的updateById()方法,快速将接收道德参数或者查询结果中原本不为null的字段更新为null,这个时候使用updateById()并不能实现这个操作,不会报错,但是对应的字段并没有更新为null,所以本文介绍了Mybatis-plus更新Null字段的方法
    2025-03-03
  • SpringBoot mybatis-plus使用json字段实战指南

    SpringBoot mybatis-plus使用json字段实战指南

    在现代应用开发中经常会使用JSON格式存储和传输数据,为了便捷地处理数据库中的JSON字段,MyBatis-Plus提供了强大的JSON处理器,这篇文章主要给大家介绍了关于SpringBoot mybatis-plus使用json字段的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论