Spring--2

AOP

概念:面向切面编程,对业务逻辑与非业务逻辑进行隔离,从而降低耦合,提高程序的可重用性。

好处:减少重复,专注业务。

原理:使用动态代理在执行方法前后或出现异常时加入相关逻辑。

术语解释:

连接点:可增强的方法

切入点:实际被增强的方法

通知:增强的功能

切面:通知加入切入点的过程

目标:切入点所在的类

代理:应用通知时创建的代理对象

AspectJ

AOP框架,支持注解开发,简单方便快捷,

Java实现方式

XML

1.导入依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.2.RELEASE</version>
</dependency>

2.将通知抽取出来

3.配置通知与切入点的关系

<!--配置aop--><bean id="CommonUtil" class="com.ffyc.spring.util.CommonUtil"></bean>
    <aop:config><!--配置切入点-->
<!--execution是表达式的主体第一个*是返回的类型*代表所有类型.就是包下的层级关系.后面可以跟*表示该包下的方法也可用*号代替,表示所有的方法方法括号中为参数 ..表示任意参数
--><aop:pointcut id="insertAdmin" expression="execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))"/><aop:aspect ref="CommonUtil"><!--前置通知,在方法执行前被调用--><!--<aop:before method="saveLog" pointcut-ref="allMethod"/>--><!--后置通知,在方法执行完成后被调用 在后置通知前方法出现异常就不再调用--><!--<aop:after-returning method="saveLog" pointcut-ref="allMethod"></aop:after-returning>--><!--最终通知 无论方法是否出现异常都会在最终调用--><!--<aop:after method="saveLog" pointcut-ref="allMethod"></aop:after>--><!--异常通知 只有出现异常才会调用--><!--<aop:after-throwing method="saveLog" pointcut-ref="allMethod" throwing="e"></aop:after-throwing>--><!--<aop:after-throwing method="saveLog" pointcut-ref="allMethod"></aop:after-throwing>--><!--环绕通知--><aop:around method="saveLog" pointcut-ref="insertAdmin"></aop:around></aop:aspect></aop:config>

注解

1.导入依赖

2.开启自动代理

       <!--开启自动代理--><aop:aspectj-autoproxy />

3.注解

    //@Before("execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))")//@After("execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))")//@AfterReturning("execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))")//@AfterThrowing(value = "execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))",throwing = "e")@Around(value = "execution(* com.ffyc.spring.dao.AdminDao.insertAdmin(..))")public void saveLog(Throwable e){System.out.println("保存时间"+new Date()+"异常信息:"+e.getMessage());}

aop:就是使用代理对象方式将非业务代码抽取出来,通过代理对象来进行调用,这样就可以将业务代码与非业务代码隔离开,降低代码的耦合度。

在不修改业务代码的前提下,添加功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++:string类

想要深刻理解string类最好自己实现一个&#xff0c;可以看我的这篇文章&#xff1a;c:模拟实现string类-CSDN博客想要学好库中的string最好自己实现一个出来&#xff0c;能够加深对string的理解。蟹蟹观看&#xff01;关注&#xff01;评论&#xff01;一键三连&#xff01;htt…

模型 支付矩阵

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。策略选择的收益分析工具。 1 支付矩阵的应用 1.1 支付矩阵在市场竞争策略分析中的应用 支付矩阵是一种强大的决策工具&#xff0c;它在多个领域的应用中都发挥着重要作用。以下是一个具体的应用案例…

WebView渲染异常导致闪退解决方案

背景&#xff1a; App主页面使用了大量WebView容器(10个以上)显示图表信息&#xff0c;最新发现bugly上面出现一些关于浏览器Native Crash&#xff0c;如下&#xff1a; 经排查&#xff0c;是WebView渲染失败导致Crash&#xff0c;可以通过webView.loadUrl("chrome://cra…

《Windows PE》7.4 资源表应用

本节我们将通过两个示例程序&#xff0c;演示对PE文件内图标资源的置换与提取。 本节必须掌握的知识点&#xff1a; 更改图标 提取图标资源 7.4.1 更改图标 让我们来做一个实验&#xff0c;替换PE文件中现有的图标。如果手工替换&#xff0c;一定是先找到资源表&#xff0c;…

Linux -- 共享内存(2)

目录 命令 ipcs -m &#xff1a; 命令 ipcrm -m shmid&#xff1a; 共享内存的通信&#xff1a; 为什么共享内存更高效&#xff1f; 代码&#xff1a; ShmClient.cc&#xff1a; ShmServer.cc&#xff1a; 结果&#xff1a; 如何让共享内存实现同步&#xff1f; 代码&a…

基于SSM的BBS社区论坛系统源码

运行环境&#xff1a;ideamysql5.7jdk8maven 使用技术&#xff1a;ssmmysqlshirolayui 功能模块&#xff1a;用户管理、模板管理、帖子管理、公告管理、权限管理等

echarts:导入excel生成桑葚图

前言 前两天帮别人实现了一个小功能&#xff0c;主要是选择excel文件&#xff0c;读取里面的数据&#xff0c;将数据生成桑葚图 echarts官方桑葚图案例 实现 因为就是一个单纯的html文件&#xff0c;用到的库都是通过CDN的方式加载的&#xff0c;会有一些慢 <!DOCTYPE …

IPC 进程间通信 信号量集合 Linux环境 C语言实现

只用于多进程间的并发控制 一个信息量集合(信号量集 或 信息量数组)中顺序存储着多个信号量 相关接口函数&#xff1a; 实际项目&#xff0c;直接调用semop函数来作为某个或某几个信号量的PV操作函数会很不方便&#xff0c;因此会对信号量集合的接口进行二次封装&#xff0c;封…

AI实操Excel:在Excel中学习人工智能基础算法

人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一&#xff0c;但对于初学者来说&#xff0c;直接上手复杂的编程和算法可能会感到有些困难。今天&#xff0c;我要向大家介绍一个非常实用的工具——AI实操Excel&#xff0c;这是一个通过Excel实现人工智…

「二叉树进阶题解:构建、遍历与结构转化全解析」

文章目录 根据二叉树创建字符串思路代码 二叉树的层序遍历思路代码 二叉树的最近公共祖先思路代码 二叉搜索树与双向链表思路代码 从前序与中序遍历序列构造二叉树思路代码 总结 根据二叉树创建字符串 题目&#xff1a; 样例&#xff1a; 可以看见&#xff0c;唯一特殊的就…

影刀RPA实战:常见实用功能指令

1. 电脑锁屏与解屏 在实际工作中&#xff0c;我们为了自身工作电脑数据文件的安全&#xff0c;都会为电脑设置密码&#xff0c;当我们离开电脑时&#xff0c;直接锁屏&#xff0c;即使不手动锁屏&#xff0c;也会在一定时间内自动锁屏。 如果你的工作是影刀RPA帮你自动化处理…

Spring Boot驱动的厨艺社交平台设计与实现

5 系统实现 5.1食材分类管理 管理员管理食材分类&#xff0c;可以添加&#xff0c;修改&#xff0c;删除食材分类信息。下图就是食材分类管理页面。 图5.1 食材分类管理页面 5.2 用户信息管理 管理员管理用户信息&#xff0c;可以添加&#xff0c;修改&#xff0c;删除用户信…

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的顺序消费?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 分布式&#xff08;不是单机&#xff09;的情况下&#xff0c;如何保证消息的…

量子变分算法 (python qiskit)

背景 变分量子算法是用于观察嘈杂的近期设备上的量子计算效用的有前途的候选混合算法。变分算法的特点是使用经典优化算法迭代更新参数化试验解决方案或“拟设”。这些方法中最重要的是变分量子特征求解器 (VQE)&#xff0c;它旨在求解给定汉密尔顿量的基态&#xff0c;该汉密尔…

mac 上使用 cmake 构建包含 OpenMP 的项目

安装依赖 # clang 默认不支持 -fopenmp&#xff0c;因为它没有内置 OpenMP 支持。 # 为了解决这个问题&#xff0c;需要安装 libomp 并配置 clang 使用 libomp brew install libomp# macOS 自带的 clang 编译器被修改过&#xff0c;默认禁用了 OpenMP&#xff0c; # 而不支持 …

【K8S系列】Kubernetes Service 基础知识 详细介绍

在 Kubernetes 中&#xff0c;Service 是一种抽象的资源&#xff0c;用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口&#xff0c;解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。 1.…

class 36 二叉树高频题目 - 上 (不含有树形dp)

1. BFS 的两种方式 如下图, 是一个二叉树. 我们需要按照层的方式来遍历这棵树. 1.1 使用 JDK 自带的类实现(链表实现, 经典 BFS) 首先我们实现一个队列, 这个队列从头进, 从尾出.然后将根节点放入其中, 然后将放入的节点弹出,然后继续验证弹出的节点有没有左孩子, 若是有, 将…

【HTML】之form表单元素详解

HTML表单是网页与用户交互的关键组成部分&#xff0c;它允许用户输入数据并将数据提交到服务器进行处理。本文将全面详细地介绍HTML表单的各个方面&#xff0c;从基础元素到高级用法&#xff0c;并提供丰富的代码示例和中文注释&#xff0c;帮助你彻底掌握表单的使用。 1. 表单…

强大!Spring Boot 3.3 集成 PDFBox 轻松实现电子签章功能!

强大&#xff01;Spring Boot 3.3 集成 PDFBox 轻松实现电子签章功能&#xff01; 随着数字化办公和电子合同的普及&#xff0c;PDF 文档已经成为很多业务场景中的标准文件格式。为了确保文档的安全性和法律效力&#xff0c;电子签章技术应运而生。电子签章不仅可以证明文件的…

视频美颜平台的搭建指南:基于直播美颜SDK的完整解决方案

众所周知&#xff0c;直播美颜SDK是实现视频美颜功能的核心。本文将详细解析如何基于直播美颜SDK搭建一个完整的视频美颜平台。 一、视频美颜SDK的核心功能 直播美颜SDK作为平台的技术核心&#xff0c;能够提供丰富的美颜效果和稳定的视频处理能力。通常&#xff0c;SDK具备以…