如何通过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程序启动时初始化数据的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Spring Boot web项目的TDD流程

    Spring Boot web项目的TDD流程

    TDD(Test-driven development) 测试驱动开发,简单点说就是编写测试,再编写代码。这是首要一条,不可动摇的一条,先写代码后写测试的都是假TDD。
    2021-05-05
  • 5个JAVA入门必看的经典实例

    5个JAVA入门必看的经典实例

    这篇文章主要为大家详细介绍了5个JAVA入门必看的经典实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Druid(新版starter)在SpringBoot下的使用教程

    Druid(新版starter)在SpringBoot下的使用教程

    Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,DruidDataSource支持的数据库,这篇文章主要介绍了Druid(新版starter)在SpringBoot下的使用,需要的朋友可以参考下
    2023-05-05
  • 全局请求添加TraceId轻松看日志

    全局请求添加TraceId轻松看日志

    这篇文章主要为大家介绍了全局请求添加TraceId,更加方便轻松的看日志,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue3源码解读effectScope API及实现原理

    Vue3源码解读effectScope API及实现原理

    这篇文章主要为大家介绍了Vue3源码解读effectScope API及实现原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Java中的collection集合类型总结

    Java中的collection集合类型总结

    Java的集合类型都是对java.util包中Collection接口的继承,这里我们主要介绍依赖于collection的一些主分支,一起来看一下Java中的collection集合类型总结
    2016-05-05
  • Java实现全图背景水印的示例详解

    Java实现全图背景水印的示例详解

    这篇文章主要为大家详细介绍了如何利用Java实现全图背景水印的方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • 解决IDEA springboot

    解决IDEA springboot"spring-boot-maven-plugin"报红问题

    这篇文章主要介绍了解决IDEA springboot"spring-boot-maven-plugin"报红问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 实例讲解Java的设计模式编程中责任链模式的运用

    实例讲解Java的设计模式编程中责任链模式的运用

    这篇文章主要介绍了Java的设计模式编程中责任链模式的运用,讲解了通过条件判断结构来分配不同对象的责任权限,需要的朋友可以参考下
    2016-02-02

最新评论