SpringAop介绍与使用

news2024/11/13 18:42:06

AOP的介绍

在不修改原有代码的情况下 增强跟主要业务没有关系的公共功能代码到  之
前写好的方法中的指定位置 这种编程的方式叫AOP

AOP的底层用的代理,代理是一种设计模式

静态代理

玩家类

代理类

他们的接口

最后用接口接收代理的类实现静态代理

总结:在不修改原有代码的情况下 增强跟主要业务没有关系的公共功能代码到  之
前写好的方法中的指定位置

弊端:需要为每一个被代理的类创建一个“代理类”,虽然这种方式可以实现,但
是成本太高

使用jdk动态代理增加日志功能:动态生成代理类

首先先创建接口

继承接口实现增加功能

创建一个类继承InvocationHandler为了执行要代理的方法

首先创建被代理对象(公共代理对象)

创建构造方法给对象赋值

创建代理的执行方法

args是传进来参数的地址,转成list获取值

invoke()负责执行要代理的方法,target要代理的对象,args传入参数的地址,最后返回方法结果

test方法

调用自己类里的createProxy方法new 要用对象的类给他转换成继承的接口

用接口调用方法

createProxy方法

第一句类加载器传入代理类接口(接口是传入的方法的参数)

第二句指定代理类类型(大多数情况固定写法,改个接口名就能用)

第三句调用创建的类

第四句创建代理类

第五句输出动态代理类

第六句写要调用的方法

以上是jdk动态代理

jdk动态代理 :必须保证被代理的类实现了接口

切面的结构如下图

首先要导入一个切面和spring配合的依赖包

解释@Before execution固定写法

第一个*代表要增强类中方法的类型(如public)和返回值(如:void)写*的话就是万能的private私有或者返回值是string都行,cn.tulingxueyuan.service是该项目下要增强的包

..*.*(..)此包下所有的子孙包和类和类的方法和任何方法的参数

剩下此类的注解都里面意思都和before注解意思相同

aop必须在xml设置扫描包和开启aop

在最后查询数据的时候一定要写空指针异常要不容易出错

调用RoleDaoImpl里的方法

最后执行结果

jdk:实现动态代理需要实现类必须继承接口

cglib :实现动态代理不需要接口

但是在实际生活整项目有的继承接口有的不继承但是都需要动态代理的话就用aop里

aop:完美的把两种代理结合起来都能使用,如下图和下下图

第一张图继承接口用接口输出

第二种图没继承接口用类输出

两者都可以实现动态代理在aop中

什么是AOP?

在不修改原有代码的情况下 增强跟主要业务没有关系的公共功能代码到  之
前写好的方法中的指定位置 这种编程的方式叫AOP

JDK动态代理和CGLIB动态代理的区别?

jdk:实现动态代理需要实现类必须继承接口

cglib :实现动态代理不需要接口

解释一下spring AOP里面的几个名词?

@Aspect:用于设置增强类,下面的注解是增强类里的

@Before:在目标方法之前运行:前置通知
@After:在目标方法之后运行:后置通知
@AfterReturning:在目标方法正常返回之后:返回通知
@AfterThrowing:在目标方法抛出异常后开始运行:异常通知
@Around:环绕:环绕通知

搭建基于spring的AOP

整篇文章就是搭建基于spring的AOP

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英特尔终止开发开源 H.265/HEVC 编码器项目

作为英特尔可扩展视频技术(SVT)计划的一部分,一直以来他们持续在开发 SVT-HEVC,这是一款 BSD 许可的高性能 H.265/HEVC 视频编码器,针对至强可扩展处理器和至强 D 处理器进行了优化。但最近他们改变了方向,…

kali安装

引言 Kali Linux 是一个基于 Debian 的 Linux 发行版,专门为渗透测试和安全审计而设计。它包含了大量的安全工具,如 Wireshark、Nmap、Metasploit 等,这些工具可以帮助安全专家和研究人员进行网络安全评估、漏洞检测和渗透测试。Kali Linux …

InternLM 2.5 书生·浦语 开源大模型本地部署体验

老牛同学之前偶尔刷到过InternLM大模型相关的介绍文章,因为在老牛同学心中,Qwen2千问才是国内开源模型中最适合自己的大模型,原因是自己在本地部署和应用Qwen2都非常满意,所以没有在意InternLM大模型,也就没有动力去了…

程序员的AI大模型进阶之旅,零基础入门到精通,收藏这一篇就够了

作为程序员,如果你有兴趣迈向AI大模型的进阶之旅,以下是一些步骤和资源可以帮助你: 基础知识:了解机器学习和深度学习的基础概念是重要的第一步。学习线性代数、概率论和统计学等数学基础知识,以及机器学习算法和神经网…

风波中坚守:技术应对突发故障的危与机

文章目录 快速响应与问题定位策略确定故障类型使用排查工具明确响应流程实时沟通与更新事后总结 健全的应急预案和备份机制制定应急预案定期演练数据备份和快速恢复机制持续改进 事后总结与持续改进分析问题根源定义改进措施促进团队学习培养危机意识 技术债务管理与监测识别与…

Netty基础知识

官网地址: https://netty.io/ 快速入门:https://netty.io/wiki/user-guide-for-4.x.html Netty 是一个 NIO 客户端服务器框架,方便快速、简单地开发网络应用程序。 NIO(Non-blocking I/O,在Java领域,也称为New I/O&…

《牛虻》读后感

《牛虻》这本书是同事送的,最近换工作、搬家很多杂事,也就没有多少看书的兴致,所以断断续续看了快两周才看完。这是爱尔兰女作家埃塞尔丽莲伏尼契的代表作,在我国声名远播,是一代人的精神食粮。怀着崇敬的心情翻开这本…

淘宝天猫商品详情接口API解密:如何轻松找到最适合的商品?

在当今的电子商务时代,淘宝和天猫作为国内最大的电商平台,每天都有海量的商品供我们选择。如何从这庞大的商品库中寻找到最适合自己的商品?这就需要我们掌握一种高效的搜索方式——详情接口API解密。本文将为您详细解析这一技术,助…

基于强化学习的即时商店自动化管理

介绍 如今,提示是与大型语言模型 (LLM) 交互的主要模式。提示需要根据用户需求进行调整,为 LLM 提供正确的上下文和指导 — 以最大限度地提高获得“正确”响应的机会。 这导致了提示工程 [1] 的兴起,并成为一门专业学科,提示工程师…

docker容器数据卷、数据卷基本案例

在docker里面创建也会在主机中生成文件 并且docker停止 时在主机中创建文件仍然可以生成在docker中

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

提升大模型内容创作能力

前言 现在的大模型能够创作一些故事、小说等等,但是大多数时候创作出来的剧情都是泛泛而谈,并没人给读者很爽的感觉。近期已经有一些工作开始在该方面进行发力,即让大模型做内容消费,如果大模型能够源源不断的创作出好的剧情来供…

幅频特性曲线分析及使用WPF绘制

文章目录 1、一阶惯性环节的幅频特性曲线分析及绘制2、二阶系统的幅频特性曲线分析及绘制3、一般的系统4、上位机代码实现4.1 一阶惯性系统4.2 二阶系统 5、稳定裕度5.1 幅值裕度5.2 相角裕度 参考 1、一阶惯性环节的幅频特性曲线分析及绘制 这里的a和b可以根据系统的不同修改,…

Ubuntu 22.04上稳定安装与配置搜狗输入法详细教程

摘要:本教程详细介绍了如何在Ubuntu 22.04上安装和配置搜狗输入法,每个步骤详细配图。由于在Ubuntu 24.04上存在兼容性问题,建议用户继续使用稳定的22.04版本。教程涵盖了从更新系统源、安装fcitx输入法框架,到下载和配置搜狗输入…

12、stm32通过dht11读取温湿度

一、配置 二、代码 dht11.c /** dht11.c** Created on: Aug 19, 2024* Author: Administrator*/#include "main.h" #include "tim.h" #include "usart.h" #include "gpio.h" /**TIM3定时器实现us级延时*/ void Delay_us(uint16…

谷歌登录的时候,要求在手机的通知点是,并按数字来验证身份,但是手机通知栏没有收到通知和数字,原因是什么,怎么办?

前两天,有个朋友联系到GG账号服务,说他的一个谷歌账号在新设备登录的时候,提示说要在手机的通知栏点击谷歌发来的通知,点击是确认,并且要点按相应的数字。 但问题是他反复刷新手机的通知栏都没有看到谷歌发来的通知&a…

谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ

文章目录 一,Spring整合RabbittMq的步骤二,AmqpAdmin使用1. createExchange()2. testCreateQueue()3. createBinding()4,发送消息 这一部分讲解Spring整合RabbitMq的步骤及其使用,包括: 255-商城业务-消息队列-SpringB…

Tita的OKR :产品经理的OKR

产品经理制定的OKR,对组织发展有重大的意义,它能促使产品经理,产品团队,乃至是公司全体员工走出舒适区,超越能力边界。正因为挑战的存在,才使得产品经理才有忧患意识,不断改进产品,从…

【操作系统】10.虚拟内存管理有什么不同?

2.虚拟内存管理有什么不同? 2.1 虚拟内存的基本概念 虚拟内存的概念 具有请求调入和置换功能,从逻辑上对内存容量加以扩充的一种存储器系统 局部性原理 时间局部性 空间局部性 虚拟内存的特征 多次性 对换性 虚拟性 2.1.1 虚拟内存的实现 请求分页存储管…

了解一点电池的工作原理,让它们更好地为我们工作。【手机充电小技巧】(影响电池寿命的主要因素:过充、过放以及高温)

文章目录 引言I 充电小技巧,充分发挥电池性能随充随用都行充电时移除某些保护壳不正常的持续发烫,建议停止充电及时拔掉充电器或者关闭插座电源长期存放时,请保持一半电量。电池健康自动管理II 电池的工作原理快充为便捷,慢充保寿命。锂离子电池以充电周期方式工作,让充电更…