首页 > 其他分享 >SpringAOP的简单介绍及入门案例

SpringAOP的简单介绍及入门案例

时间:2024-07-20 21:56:37浏览次数:18  
标签:增强 入门 通知 after 切点 案例 创建 SpringAOP 方法

文章目录


一、AOP介绍

AOP( 面向切面编程 )是一种思想,它的目的就是在不修改源代码的基础上,对原有功能进行增强。
SpringAOP是对AOP思想的一种实现,Spring底层同时支持jdk和cglib动态代理。

Spring会根据被代理的类是否有接口自动选择代理方式:

  • 如果有接口,就采用jdk动态代理
  • 如果没接口,就采用cglib的方式

AOP中有一些核心概念:

  • 目标对象(Target)
    被代理的对象

  • 连接点(JoinPoint)
    目标对象中得所有方法

  • 切入点(PointCut)
    目标对象中得要进行功能增强那部分方法

  • 增强 (Advice 通知)
    一个具体增强功能(增强对象 增强方法)

  • 切面 (Aspect)
    切面是一种描述,描述的是: 哪个增强方法加入到了哪个切点的什么位置

二、使用步骤(日志案例)

1.创建模块,导入依赖

<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.6</version>
        </dependency>

        <!--切点表达式解析坐标-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.7</version>
        </dependency>

        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.6</version>
        </dependency>
    </dependencies>

将上面依赖放到pom.xml文件中。

2.创建实体类

在这里插入图片描述
在这里插入图片描述

3.创建业务层接口和实现类

在这里插入图片描述
接口
在这里插入图片描述
实现类
在这里插入图片描述

4.创建日志类

在这里插入图片描述
在这里插入图片描述

5.配置切面

在这里插入图片描述

6.创建配置类

在这里插入图片描述
在这里插入图片描述

7.单元测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、通知类型

1.四大通知

四大通知描述的就是增强方法在切点方法的什么位置上执行

  • 前置通知(before):增强方法在切点运行之前执行
  • 返回后通知(after-returning):增强方法在某切点正常完成后执行的通知,不包括抛出异常的情况
  • 异常后通知(after-throwing):增强方法在某切点抛出异常退出时执行的通知
  • 后置通知(after):增强方法在某切点退出的时候执行的通知(不论是正常返回还是异常退出)
try{
	前置通知(before)
   
	//切点执行位置
   
	返回后通知(after-returning)
}catch(Execption e){
	异常后通知(after-throwing)
}finally{
	后置通知(after)
}

① 添加通知方法
在这里插入图片描述
② 测试
在这里插入图片描述
在这里插入图片描述

2.环绕通知

它是一种特殊的通知,他允许以编码的形式实现四大通知
① 添加通知方法
在这里插入图片描述
② 测试
在这里插入图片描述
在这里插入图片描述

四、切点表达式

切点表达式用于挑选切点

1.execution

execution() :指定一组规则来匹配某些类中的方法,匹配中的就是切点

*代表一个 如果在参数位置代表只有一个参数 如果在包的位置 代表一层包
. . 代表任意

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.@annotation

@annotation:指定一个注解,凡是标有此注解的方法都是切点
① 自定义注解
在这里插入图片描述
在这里插入图片描述
② 在需要作为切点的方法上添加注解

在这里插入图片描述
③ 设置切点表达式
在这里插入图片描述
④ 测试
在这里插入图片描述
在这里插入图片描述

五、记录日志详情

在执行方法时要记录 类名 方法名 参数 返回值 异常信息 方法执行时间

在这里插入图片描述
在这里插入图片描述

标签:增强,入门,通知,after,切点,案例,创建,SpringAOP,方法
From: https://blog.csdn.net/qq_53118426/article/details/140517412

相关文章

  • Java入门知识
    Java特性和优势简单性面向对象可移植性高性能分布式动态性多线程安全性健壮性Java三大版本JavaSE:标准版(桌面程序,控制开发....)JavaME:嵌入式开发(手机,小家电....)JavaEE:E企业级开发(web端,服务器开发...)JDK、JRE、JVMJDK:JavaDevelopmentKitJRE:JavaRuntimeE......
  • Git入门
    初始化配置配置用户名gitconfig--globaluser.name"YourName"配置邮箱gitconfig--globaluser.email"[email protected]"存储配置(存储用户名邮箱)gitconfig--globalcredential.helperstore创建仓库创建一个新的本地仓库(省略project-name则在当前目录创建)g......
  • 万字长文|LLM大模型基础入门(非常详细)从入门到精通系列之:(三)Transformer 架构
    引言在本文中,我们将介绍并解释基于Transformer的大语言模型的每个步骤。当第一次接触Transformer架构时,我被可用于理解它的大量概念和教程所淹没。一些视频或文章假设了自然语言处理(NLP)概念的先验知识,而另一些则太长且难以理解。为了掌握Transformer架构,我不得不阅......
  • 入局大模型!(非常详细)从入门到精通,值得开发者好好看一看的 AI 入门法!(内附教程)
    今年招聘市场确实是好点了,我发现群友都在讨论,得赶快学点AI大模型。他们有的是想正式转到一些新兴的AI行业,需要系统的学习训练。更多的是想跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。这也可以理解,ChatGPT推出仅一年半的时间,就将生成式AI推......
  • OpenAI入门指南 aidoczh.com 上线OpenAI Cookbook中文版
    文章目录1、网址地址(1)中文地址(2)官网地址2、OpenAICookbook介绍3、内容导航1、网址地址(1)中文地址openai-cookbook中文网址http://www.aidoczh.com/docs/openai_cookbook/openai-cookbook中文项目已经放在github上https://github.com/aidoczh/openai-cookbook-z......
  • Pandas-入门
    PandasPandas1.1Series1.1.1常用属性1.1.2常用方法2.1DataFrame2.1.1基础属性基本函数2.1.2索引相关操作2.1.3修改行名和列索引值2.1.4添加列2.1.5删除列3.1导入导出数据Pandas"""PandasDataFrame:可以把DataFrame看作由Series对象组成的字......
  • WEB前端08-综合案例(动态表格)
    使用HTML、CSS和JavaScript创建动态表格在本教程中,我们将创建一个动态表格,允许用户添加行、选择项目,并执行批量操作,如全选或删除选中的行。我们将通过HTML、CSS和JavaScript来实现这一功能。让我们逐步了解每个部分是如何协同工作的。HTML结构我们的HTML文档......
  • kettle从入门到精通 第七十九课 ETL之kettle kettle读取数据库BLOB字段转换为文件
     上一课我们讲解了如何将文件以二进制流的方式写入数据库,本节课我们一起学习下如何将二进制数据读取为文件。 1、将二进制流转换为文件这里主要用到了步骤【文本文件输出】。表输入步骤从表中读取blob字段,java代码定义二进制流转换为文件的全路径,文本文件输出步骤根据全路径和......
  • idea内置数据库DataGrip + 多表操作sql语句 -- 逻辑外键建表 + 案例联系
    逻辑外键建表+案例联系--=====================================多表设计================================---------------------一对多职位与员工--员工子表createtabletb_emp(idintunsignedprimarykeyauto_incrementcomment'id',user......
  • kettle从入门到精通 第七十八课 ETL之kettle kettle将文件写入数据库BLOB字段
    前些日子一个小伙伴私聊我咨询如何将数据库中的BLOB字段读取为文件。帮他顺利读取文件之后我在想kettle肯定支持将文件写入数据库BLOB字段。今天先来一起学习下如何将文件以二进制流的方式写进数据库。 1、创建数据表,脚本如下:CREATETABLE`file`(`id`bigintNOTNULLA......