如何通过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;
   }

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

(0)

相关推荐

  • 如何在spring官网查找XML基础配置文件

    这篇文章主要介绍了如何在spring官网查找XML基础配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.首先进入spring官网:https://spring.io/: 2.然后点击projects目录,出现如下页面: 3.点击spring framework进入spring框架页面,点击Learn,点击Reference Doc如图: 4.进入doc页面后,点击Core,如图: 5.进入core页面后,点击1.2.1 Configu

  • Spring主配置文件(applicationContext.xml) 导入约束详解

    eclipse导入Spring配置文件约束  Windows-Preference-XML-XMLCatalog 点 Add 选File System 下spring的解压包下的schema文件夹,选beans,然后选择spring对应的版本的xsd文件 选择指定xsd文件,再Key的路径后面添加"/spring-beans-4.2.xsd"点ok 创建applicationContext.xml   写根元素 <beans></beans> Add导入XSI,

  • Spring使用AspectJ注解和XML配置实现AOP

    本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project 首先是位于classpath下的applicationContext.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmln

  • 详解Spring Aop实例之xml配置

    AOP的配置方式有2种方式:xml配置和AspectJ注解方式.今天我们就来实践一下xml配置方式. 我采用的jdk代理,所以首先将接口和实现类代码附上 package com.tgb.aop; public interface UserManager { public String findUserById(int userId); } package com.tgb.aop; public class UserManagerImpl implements UserManager { publ

  • Spring boot AOP通过XML配置文件声明

    通过 XML 配置文件声明 在前两篇博文和示例中,我们已经展示了如何通过注解配置去声明切面,下面我们看看如何在 XML 文件中声明切面.下面先列出 XML 中声明 AOP 的常用元素: AOP配置元素 用途 aop:advisor 定义AOP通知器 aop:after 定义AOP后置通知(不管被通知的方法是否执行成功) aop:after-returning 定义AOP返回通知 aop:after-throwing 定义AOP异常通知 aop:around 定义AOP环绕通知 aop:aspec

  • spring中aop的xml配置方法实例详解

    前言 AOP:即面向切面编程,是一种编程思想,OOP的延续.在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等. aop,面向切面编程的目标就是分离关注点,比如:一个骑士只需要关注守护安全,或者远征,而骑士辉煌一生的事迹由谁来记录和歌颂呢,当然不会是自己了,这个完全可以由诗人去歌颂,比如当骑士出征的时候诗人可以去欢送,当骑士英勇牺牲的时候,诗人可以写诗歌颂骑士的一生.那么骑士只需要关注怎么打仗就好了.而诗人也只需要关注写诗歌颂和欢送就好了,那么这样就把功能分离了.所以可以把诗

  • SpringBoot通过yml和xml文件配置日志输出方法

    SpringBoot中默认使用Logback进行日志输出,可以同时使用SpringBoot框架的配置文件application.yml或是通过logback的配置文件logback.xml进行配置. 通过application.yml配置 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 Lo

  • spring框架配置实体类复杂属性注入xml文件过程详解

    spring框架是javaWeb项目中至关重要的一个框架,大多web 项目在工作层次上分为持久层.服务层.控制层.持久层(dao.mapper)用于连接数据库,完成项目与数据库中数据的传递:服务层(service)主要完成项目中各种业务(增.删.改.查),连接持久层.控制层,还和各种实体类打交道,而控制层主要和web前端页面打交道,与页面传递数据. 今天,主要介绍服务层的框架spring,也是各种整合框架最核心的框架.主要介绍spring中的一个小知识点,很难记的,那就是在spring框架对实体

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

    第一步:把通知类用 bean 标签配置起来 <bean id="txManager" class="com.atguigu.account.utils.TransactionManager"> <!-- 注入ConnectionUtils --> <property name="connectionUtils" ref="connectionUtils" /> </bean> 第

  • Spring基于advisor配置aop过程解析

    1.目标类 package com.gec.target; public class Hadoop { public void eatting() { System.out.println("大象正在吃东西 1"); try { //耗时5秒 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } 2.增强类,此类必须要实现增强方位接口 package com.gec.advic

  • Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式. 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过application.yml下发 按天生成日志,当天的日志>50MB回滚 最多保存10天日志 生成的日志中Pattern自

  • SpringMVC用XML方式实现AOP的方法示例

    1.首先创建web工程,之后导入Spring jar包,目录如下 2.文件代码 2.1AfterAdvice package com.niit.aop; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; /* * 后置通知 * havingClass方法执行之后才执行. * 输出日记 * */ public class AfterAdvice implements After

  • Spring基于xml文件配置Bean过程详解

    这篇文章主要介绍了spring基于xml文件配置Bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过全类名来配置: class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求bean中必须有一个无参的构造器. <bean id="helloWorld" class="com.gong.spring.beans.HelloWorld"> <property na

  • SpringFramework应用接入Apollo配置中心过程解析

    环境: SpringFramework:4.3.5.RELEASE apollo-client:1.5.1 1.在项目的 resources/META-INF/ 目录下添加 app.properties 文件: #Apollo配置id app.id = phpdragon-demo apollo.bootstrap.enabled = true apollo.eagerLoad.enabled = true apollo.cacheDir = /data/app_data/apollo_cach

  • 如何通过XML方式配置并实现Mybatis

    idea中创建一个maven项目 在pom文件中导入下面的依赖 <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!--mysql数据库驱动包--> <depend

  • VSCode IDE 配置环境过程解析

    目录 说明 前提条件 创建项目 导出模板项目 VSCode创建项目 配置C/CPP环境 配置编译任务 如果用 PlatformIO 创建 libopencm3 项目可以做到零配置, 只是 libopencm3 的版本会旧一点. 这里说的是仅使用 VSCode 创建C/CPP项目时的配置. VSCode 有代码提示, 定位来源和各种快捷键, 更适合日常编码工作. 说明 因为 PlatformIO 的 platform:st-stm32 自带 libopencm3, 如果用 PlatformIO 创

  • SpringBoot消息国际化配置实现过程解析

    一.目的 针对不同地区,设置不同的语言信息. SpringBoot国际化配置文件默认放在classpath:message.properties,如果自定义消息配置文件,需要application.properties或application.yml中设置spring.messages.basename的值. 二.步骤 在src/main/resources 下建i18n文件夹 在i18n文件夹中建立messages.properties 找不到语言配置时,使用此文件 hello=你好_默认 在

  • Python Django路径配置实现过程解析

    假设访问的views.py如下 1.使用url配置默认页 from django.conf.urls import url from django.contrib import admin from django.urls import path from HelloWorld import views urlpatterns = [ path('admin/', admin.site.urls), url('^$', views.hello), ] 这样可以访问http://127.0.0.1

随机推荐