iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java_Spring之XML 的 AOP 配置
  • 633
分享到

Java_Spring之XML 的 AOP 配置

Python 官方文档:入门教程 => 点击学习

摘要

目录1 环境搭建1.1 第一步:准备必要的代码1.2 第二步:拷贝必备的 jar 包到工程的 lib 目录1.3 第三步:创建 spring 的配置文件并导入约束1.4 第四步:配置

1 环境搭建

  • 示例:
    • 学习 spring 的 aop 时,采用账户转账作为示例。把 spring 的 ioc 也一起应用进来。

1.1 第一步:准备必要的代码

  • 此处包含了实体类,业务层和持久层代码。沿用上一章节中的代码即可。

1.2 第二步:拷贝必备的 jar 包到工程的 lib 目录

  • 此处要拷贝 spring 的 ioc 和 aop 两组 jar 包

1.3 第三步:创建 spring 的配置文件并导入约束

  • 此处要导入 aop 的约束
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd"></beans&gt;

1.4 第四步:配置 spring 的 ioc

<!-- 配置 service --><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property></bean><!-- 配置 dao --><bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"> <property name="dbAssit" ref="dbAssit"></property></bean><!-- 配置数据库操作对象 --><bean id="dbAssit" class="com.itheima.dbassit.DBAssit"> <property name="dataSource" ref="dataSource"></property> <!-- 指定 connection 和线程绑定 --> <property name="useCurrentConnection" value="true"></property></bean><!-- 配置数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.Mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///spring_day02"></property> <property name="user" value="root"></property> <property name="passWord" value="1234"></property></bean>

1.5 第五步:抽取公共代码制作成通知

public class TransactionManager {
 
    //定义一个 DBAssit
    private DBAssit dbAssit ;
    
    public void setDbAssit(DBAssit dbAssit) {
        this.dbAssit = dbAssit;
    }
 
    //开启事务
    public void beginTransaction() {
 
    
        try {
        
            dbAssit.getCurrentConnection().setAutoCommit(false);
        } catch (sqlException e) {
 
            e.printStackTrace();
        }
    }
 
 
    //提交事务
    public void commit() {
 
        try {
            dbAssit.getCurrentConnection().commit();
        } catch (SQLException e) {
 
            e.printStackTrace();
        }
    }
 
    //回滚事务
    public void rollback() {
 
        try {
            dbAssit.getCurrentConnection().rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
    //释放资源
    public void release() {
 
        try {
            dbAssit.releaseConnection();
        } catch (Exception e) {
 
            e.printStackTrace();
        }
    }
}

2 配置步骤

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

<!-- 配置通知 --><bean id="txManager" class="com.itheima.utils.TransactionManager"> <property name="dbAssit" ref="dbAssit"></property></bean> 

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

  • aop:config:
    • 作用:用于声明开始 aop 的配置
<aop:config> <!-- 配置的代码都写在此处 --></aop:config>

2.3 第三步:使用 aop:aspect 配置切面

  • aop:aspect:
    • 作用:
      • 用于配置切面。
    • 属性:
      • id:给切面提供一个唯一标识。
      • ref:引用配置好的通知类 bean 的 id。
<aop:aspect id="txAdvice" ref="txManager"> <!--配置通知的类型要写在此处--></aop:aspect>

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

  • aop:pointcut:
    • 作用:
      • 用于配置切入点表达式。就是指定对哪些类的哪些方法进行增强。
    • 属性:
      • expression:用于定义切入点表达式。
      • id:用于给切入点表达式提供一个唯一标识
<aop:pointcut expression="execution( public void com.itheima.service.impl.AccountServiceImpl.transfer( java.lang.String, java.lang.String, java.lang.Float ))" id="pt1"/>

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

  • 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"/>

3 切入点表达式说明

  • execution:匹配方法的执行(常用)
    • execution(表达式)
  • 表达式语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数))
  • 写法说明:
    • 全匹配方式:
public void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

访问修饰符可以省略

void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

返回值可以使用*号,表示任意返回值

* com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

包名可以使用*号,表示任意包,但是有几级包,需要写几个*

* *.*.*.*.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

使用..来表示当前包,及其子包

* com..AccountServiceImpl.saveAccount(com.itheima.domain.Account)

类名可以使用*号,表示任意类

* com..*.saveAccount(com.itheima.domain.Account)

方法名可以使用*号,表示任意方法

* com..*.*( com.itheima.domain.Account)

参数列表可以使用*,表示参数可以是任意数据类型,但是必须有参数

* com..*.*(*)

参数列表可以使用..表示有无参数均可,有参数可以是任意类型

* com..*.*(..)

​​​​​全通配方式:

* *..*.*(..)

注: 通常情况下,我们都是对业务层的方法进行增强,所以切入点表达式都是切到业务层实现类。

execution(* com.itheima.service.impl.*.*(..))

4 环绕通知

配置方式:

<aop:config>
    <aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"/>
    <aop:aspect id="txAdvice" ref="txManager">
        <!-- 配置环绕通知 -->
        <aop:around method="transactionAround" pointcut-ref="pt1"/>
    </aop:aspect>
</aop:config>
  • aop:around:
    • 作用:
      • 用于配置环绕通知
    • 属性:
      • method:指定通知中方法的名称。
      • pointct:定义切入点表达式
      • pointcut-ref:指定切入点表达式的引用
    • 说明:
      • 它是 spring 框架为我们提供的一种可以在代码中手动控制增强代码什么时候执行的方式。
    • 注意:
      • 通常情况下,环绕通知都是独立使用的
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_Spring之XML 的 AOP 配置的文章就介绍到这了,更多相关Spring 基于XML的AOP配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java_Spring之XML 的 AOP 配置

本文链接: https://www.lsjlt.com/news/203223.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java_Spring之XML 的 AOP 配置
    目录1 环境搭建1.1 第一步:准备必要的代码1.2 第二步:拷贝必备的 jar 包到工程的 lib 目录1.3 第三步:创建 spring 的配置文件并导入约束1.4 第四步:配置...
    99+
    2023-05-14
    Java Spring基于XML的AOP注解 Spring基于XML的AOP注解 基于XML的AOP注解
  • Java_Spring之基于注解的AOP配置
    目录1 环境搭建1.1 第一步:准备必要的代码和 jar 包1.2 第二步:在配置文件中导入 context 的名称空间1.3 第三步:把资源使用注解配置 1.4 第四步:...
    99+
    2023-05-14
    Java Spring 注解的AOP配置 Spring AOP配置 基于注解的 AOP配置
  • Java Spring之XML的AOP怎么配置
    本篇内容主要讲解“Java Spring之XML的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之XML的AOP怎么配置”吧!1 环境搭建示例:在学习 spr...
    99+
    2023-07-05
  • 使用Spring Aop如何配置xml
    本篇文章给大家分享的是有关使用Spring Aop如何配置xml,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。AOP的配置方式有2种方式:xml配置和AspectJ注解方式。今...
    99+
    2023-05-31
    springaop xml
  • spring中aop的xml配置方法实例详解
    前言AOP:即面向切面编程,是一种编程思想,OOP的延续。在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等。aop,面向切面编程的目标就是分离关注点,比如:一个骑士只需要关注守护安全,或者远征,而骑士辉煌一生的事迹由谁...
    99+
    2023-05-31
    spring aop xml配置
  • Spring的注解配置与XML配置之间的比较
    注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要...
    99+
    2022-11-15
    spring 注解配置 XML配置
  • Java中Spring框架之AOP如何配置
    这篇文章主要介绍了Java中Spring框架之AOP如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  什么是AOP  AOP(Aspect Oriented Prog...
    99+
    2023-06-02
  • Java Spring之基于注解的AOP怎么配置
    本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:...
    99+
    2023-07-05
  • Spring装配Bean之XML如何安装配置bean
    这篇文章给大家分享的是有关Spring装配Bean之XML如何安装配置bean的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建XML配置规范在使用XML配置前,需要创建一个新的配置规范,就像JavaConfig...
    99+
    2023-05-30
    spring xml bean
  • AOP之事务管理<aop:advisor>的两种配置方式
    目录AOP事务管理<aop:advisor>两种配置方式方式一方式二hibernate事务配置Aop aop:advisor模式AOP事务管理<aop:adviso...
    99+
    2022-11-12
  • Spring实战之XML与JavaConfig的混合配置详解
    前言之前提到了关于Spring的显示配置方式有两种,一种是基于XML配置,一种是基于JavaConfig的方式配置。对于这两种配置方式并不是互斥关系,相反,他们两能够相互融合,有效的搭配完成Spring的bean注入。这里分别介绍如何在Ja...
    99+
    2023-05-31
    spring javaconfig xml
  • springboot aop里的@Pointcut()的配置方式
    目录springboot aop里的@Pointcut()的配置springboot aop @Pointcut的用法springboot aop里的@Pointcut()的配置 ...
    99+
    2022-11-12
  • 一文详解Spring AOP的配置与使用
    目录1.关于AOP2.初步使用AOP环境配置3.使用原生Spring API接口实现AOP4.使用自定义类实现AOP5.使用注解实现AOP1.关于AOP 面向切面编程(俗称AOP)提...
    99+
    2022-11-13
    Spring AOP配置 Spring AOP使用 Spring AOP
  • Android gradle7.3.3配置AspectJX(AspectJ),一步一个坑,成功开启AOP编程之路
    前言:本文章就不详细说明AspectJ是什么玩意了,查到这篇文章的都极有可能是在Android Studio中配置AspectJ出现问题,本文就是解决问题的详细方案,目标Gradle版本7.3.3, 不过本文应该适用于7.x.x的版本 !!...
    99+
    2023-08-16
    android android studio gradle aspectj AOP
  • python之gunicorn的配置
    为了实现并发,python常见的web部署搭配nginx + gunicorn, flask + gunicorn 本文介绍gunicorn的配置和使用。 1. 安装gunicorn pip install gunicorngunicorn...
    99+
    2023-09-11
    gunicorn
  • VI3之vCenterServer配置的
              在Vmware Infrastruacture 3中,vCenter Server起到非常重要的角色。在VMware给出的一些解决方案中,常见的是针对Esx主机高用性的VMware HA等的解决方案,但好像并没有提到如何...
    99+
    2023-01-31
    vCenterServer
  • Spring AOP操作的相关术语及环境怎么配置
    这篇“Spring AOP操作的相关术语及环境怎么配置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring&...
    99+
    2023-06-30
  • vbscript如何读取xml格式的配置文件
    这篇文章主要为大家展示了“vbscript如何读取xml格式的配置文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vbscript如何读取xml格式的配置文件”这篇文章吧。复制代码 代码如下:...
    99+
    2023-06-08
  • 详解Spring中使用xml配置bean的细节
    整理总结刚学的关于spring的xml配置bean的知识。 在ApplicationContext.xml文件中使用bean节点配置bean,bean的属性id在IOC容器中必须是唯一的。<bean id="helloWorld" c...
    99+
    2023-05-31
    spring xml bean
  • 读取xml文件中的配置参数实例
    paras.xml文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/be...
    99+
    2023-05-31
    读取 xml 配置参数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作