Spring--2

server/2024/10/23 8:21:51/

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.注解

java">    //@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.ppmy.cn/server/134120.html

相关文章

94、Python之异常:自定义异常以满足业务个性化需求

引言 前面介绍了Python中内置的异常类的继承体系&#xff0c;通常来说&#xff0c;这些异常类已经能够满足各种异常的场景需要。但是&#xff0c;有时还是需要自定义异常&#xff0c;来满足一些个性化的需求&#xff0c;以及更加可控、精细化的异常管理。 本文就来介绍一下如…

C++贪心算法

贪心算法 贪心的基本原理:每一步都选择局部最优解而尽量不考虑对后续的影响&#xff0c;最终达到全局最优解。 贪心的局限性:贪心算法不能保证获得全局最》解&#xff0c;但在某些问题上具有高效性。 贪心的特征:贪心选择性质()、最优子结构性质(根据我的观察&#xff0c;很多…

复写零--双指针

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理分析 三&#xff1a;代码编写 void duplicateZeros3(vector<int>& arr) {int dest -1, cur 0, n arr.size();//1.找到要复写的最后一个数字while …

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

MOE混合专家模型总结(面试)

1. MOE介绍 MOE&#xff0c;全称Mixture of Experts&#xff0c;即混合专家模型&#xff0c;是一种基于神经网络领域开发的集成学习技术和机器学习方法。它最早于1991年被提出&#xff0c;最初应用于计算机视觉领域&#xff0c;目前在自然语言处理领域也备受推崇。MOE模型通过…

高并发负载均衡——nginx与lvs

一、企业级web项目架构 一、企业级web项目架构图 二、架构分析 客户端通过企业防火墙发送请求在App服务器如tomcat接收客户端请求前&#xff0c;面对高并发大数据量访问的企业架构&#xff0c;会通过加入负载均衡主备服务器将请求进行转发到不同web服务其中。服务器通过访问数…

CTF(二)

导言&#xff1a; 本文主要讲述在CTF竞赛中&#xff0c;web类反序列化题目unseping。。 靶场链接&#xff1a;攻防世界 (xctf.org.cn) 反序列化漏洞&#xff1a;反序列化漏洞&#xff08;二&#xff09;_fst反序列化 rocksdb 字段值错误-CSDN博客 打开后可以看到&#xff1…

《探索 Python 音频利器:sounddevice》

一、sounddevice 简介 Sounddevice 是一个强大的 Python 音频处理库&#xff0c;它为开发者提供了对 PortAudio 库的 Python 绑定&#xff0c;从而实现了在 Python 环境中播放和录制音频数据的功能。 这个库具有诸多优势。首先&#xff0c;它具有跨平台性&#xff0c;无论是在…