如何通过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程序的线程栈信息方式

    打印Java程序的线程栈信息方式

    这篇文章主要介绍了打印Java程序的线程栈信息方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 解决java 分割字符串成数组时,小圆点不能直接进行分割的问题

    解决java 分割字符串成数组时,小圆点不能直接进行分割的问题

    这篇文章主要介绍了解决java 分割字符串成数组时,小圆点不能直接进行分割的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java中双大括号初始化的理解与使用

    Java中双大括号初始化的理解与使用

    最近重读Java 编程思想,读到有关实例化代码块儿的内容,使我对于使用两个大括号进行初始化有了更深的理解,下面这篇文章主要给大家介绍了关于Java中双大括号初始化的理解与使用的相关资料,需要的朋友可以参考下
    2022-06-06
  • MyBatis持久层框架的用法知识小结

    MyBatis持久层框架的用法知识小结

    MyBatis 本是apache的一个开源项目iBatis,接下来通过本文给大家介绍MyBatis持久层框架的用法知识小结,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-07-07
  • Netty核心功能之数据容器ByteBuf详解

    Netty核心功能之数据容器ByteBuf详解

    这篇文章主要为大家介绍了Netty核心功能之数据容器ByteBuf详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java 高并发二:多线程基础详细介绍

    Java 高并发二:多线程基础详细介绍

    本文主要介绍Java 高并发多线程的知识,这里整理详细的资料来解释线程的知识,有需要的学习高并发的朋友可以参考下
    2016-09-09
  • Spring的事件监听机制示例详解

    Spring的事件监听机制示例详解

    这篇文章主要给大家介绍了关于Spring的事件监听机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 关于Spring源码深度解析(AOP功能源码解析)

    关于Spring源码深度解析(AOP功能源码解析)

    这篇文章主要介绍了关于Spring源码深度解析(AOP功能源码解析),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 如何使用Maven管理项目?Maven管理项目实例

    如何使用Maven管理项目?Maven管理项目实例

    下面小编就为大家带来一篇如何使用Maven管理项目?Maven管理项目实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java中的几种读取properties配置文件的方式

    Java中的几种读取properties配置文件的方式

    这篇文章主要介绍了Java中的几种读取properties配置文件的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论