SpringAop介绍与使用

2024-08-24 08:36
文章标签 使用 介绍 springaop

本文主要是介绍SpringAop介绍与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于SpringAop介绍与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101981

相关文章

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

关于Mybatis和JDBC的使用及区别

《关于Mybatis和JDBC的使用及区别》:本文主要介绍关于Mybatis和JDBC的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、JDBC1.1、流程1.2、优缺点2、MyBATis2.1、执行流程2.2、使用2.3、实现方式1、XML配置文件

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Java资源管理和引用体系的使用详解

《Java资源管理和引用体系的使用详解》:本文主要介绍Java资源管理和引用体系的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Java的引用体系1、强引用 (Strong Reference)2、软引用 (Soft Reference)3、弱引用 (W

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。