Spring AOP的环境搭建、切入点表达式、通知注解

Spring AOP的实现

  • Spring AOP环境搭建
    • AOP坐标依赖引入
    • 添加xml配置
    • 实现三层架构
  • 定义切入点
    • @Pointcut("匹配规则")
      • 切入点表达式
        • 1. 执行所有的公共方法
        • 2.执行任意的set方法
        • 3.设置指定包下的任意类的任意方法 (指定包: com.svt.service)
        • 4.设置指定包及于包下的任意类的任意方法 (指定包: com.svt.service)
        • 表达式中的第一个*
        • 示例
  • 通知注解
    • @Before-前置通知
      • 示例
    • @AfterReturning-返回通知
      • 示例
    • @After-最终通知
      • 示例
    • @AfterThrowing-异常通知
      • 示例
    • @Around-环绕通知
      • 示例

Spring AOP环境搭建

首先新建一个Spring框架环境,忘记搭建步骤可以去看主页之前的怎样搭建Spring框架环境
AOP环境搭建建立在Spring环境上,然后再进行以下步骤

AOP坐标依赖引入

可以去Maven官网进行下载,也可以复制下面的依赖版本

<!--Spring AOP-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>

添加xml配置

需要添加命名空间

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd

添加过后的xml文件如下,要开启自动化扫描

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启自动化扫描--><context:component-scan base-package="com.svt"/>
</beans>

实现三层架构

完善dao层、service层以及controller层,在各自层内新建各自的类并加以注释实例化

@Repository
public class UserDao {
}
@Service
public class UserService {
}
@Controller
public class UserController {
}

这样基本的AOP环境就搭建好了

定义切入点

@Pointcut(“匹配规则”)

切入点表达式

1. 执行所有的公共方法
execution(public *(..))
2.执行任意的set方法
execution(* set*(..))
3.设置指定包下的任意类的任意方法 (指定包: com.svt.service)
execution(* com.svt.service.*.*(..))
4.设置指定包及于包下的任意类的任意方法 (指定包: com.svt.service)
execution(* com.svt.service..*,*(..))
表达式中的第一个*
代表的是方法的修饰范围 (pubLic、private、protected)
如果取值是*,则表示所有范围
示例
@Pointcut("execution(* com.svt.service.*.*(..))")
public void cut(){
}

通知注解

@Before-前置通知

声明前置通知,并将通知应用到指定的切入点上
目标类的方法执行前,执行该通知

示例

value=""内写切入点方法

@Before(value = "cut()")public void before(){System.out.println("前置通知...");}

@AfterReturning-返回通知

声明返回通知,并将通知应用到指定的切入点上
目标类的方法在无异常执行后,执行该通知

示例

@AfterReturning(value = "cut()")public void afterReturn(){System.out.println("返回通知...");}

@After-最终通知

声明最终通知,并将通知应用到指定的切入点上
目标类的方法在执行后,执行该通知(有异常和无异常最终都会执行)
和finally有点像

示例

@After(value = "cut()")public void after(){System.out.println("最终通知...");}

@AfterThrowing-异常通知

声明异常通知,并将通知应用到指定的切入点上
目标类的方法在执行异常时,执行该通知

示例

@AfterThrowing(value = "cut()",throwing = "e")public void afterThrow(Exception e){System.out.println("异常通知...======异常原因:"+e.getMessage());}

@Around-环绕通知

声明环绕通知,并将通知应用到指定的切入点上
目标类的方法执行前后,都可通过环绕通知定义响应的处理
需要通过显示调用的方法,否则无法访问指定方法 pjp.proceed();

示例

@Around(value = "cut()")public Object around(ProceedingJoinPoint pjp){System.out.println("环绕通知-前置通知...");Object object=null;//object=pjp.proceed();try {//显示调用的方法object=pjp.proceed();System.out.println(pjp.getTarget());System.out.println("环绕通知-返回通知...");} catch (Throwable throwable) {throwable.printStackTrace();System.out.println("环绕通知-异常通知...");}System.out.println("环绕通知-最终通知...");return object;}

在这里插入图片描述

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

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

相关文章

用 Python 抓取 bilibili 弹幕并分析!

01 实现思路 首先&#xff0c;利用哔哩哔哩的弹幕接口&#xff0c;把数据保存到本地。接着&#xff0c;对数据进行分词。最后&#xff0c;做了评论的可视化。 02 弹幕数据 平常我们在看视频时&#xff0c;弹幕是出现在视频上的。实际上在网页中&#xff0c;弹幕是被隐藏在源代码…

【熔断限流组件resilience4j和hystrix】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟…

【期末复习向】数据可视化技术

一、重点复习 题型&#xff1a;填空题&#xff08;15道&#xff0c;2分一个&#xff09;与简答题&#xff08;3道题目&#xff0c;10分一个&#xff09;与绘图题&#xff08;选画2个类型的图&#xff09; 1.什么是数据可视化 在计算机视觉领域&#xff0c;数据可视化是对数据的…

Linux 进程(八) 进程的退出码

main 函数的返回值叫做进程的退出码。当进程成功退出的时候&#xff0c;我们一般用0来表示。进程失败的时候一般用非零来表示。我们使用不同的数字来表示进程退出时不同的失败原因。 我们查看系统的有多少退出码以及其含义时需要用到strerror() 他的头文件和用法如下。 通过一…

CSS 放大旋转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-scale-up: isAnimating }"><!-- 元素内容 -->&l…

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展&#xff0c;3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比&#xff0c;3D目标检测可以在三维空间中对物体进行定位和识别&#xff0c;具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

2023年12月青少年软件编程Python等级考试(三级)真题试卷

2023年12月青少年软件编程Python等级考试&#xff08;三级&#xff09;真题试卷 题目总数&#xff1a;38 总分数&#xff1a;100 选择题 第 1 题 单选题 一个非零的二进制正整数&#xff0c;在其末尾添加两个“0”&#xff0c;则该新数将是原数的&#xff1f;&#x…

nuxt3 env文件、全局变量处理

有两种方向 通过配置nuxt.config.ts Nuxt提供的钩子函数&#xff0c;实现全局变量的获取 runtimeconfig env文件往runtimeconfig放入内容 useAppConfig 通过env文件配置来获取服务端全局变量&#xff0c;客户端通过vite.define实现 nuxt.config.ts Nuxt钩子 1. runtim…

Win32 TEXT()宏学习

之前学习了_T()宏&#xff1b; _T()是MFC的&#xff1b; TEXT()是win32的&#xff1b; _T("")定义于tchar.h&#xff1b; TEXT宏是windows程序设计中经常遇到的宏&#xff0c;定义在 <winnt.h>中&#xff1b; 如果使用UNICODE字符集&#xff0c;则TEXT&…

kubernetes(三)

文章目录 1. k8s弹性伸缩1.1 安装heapster监控1.2 弹性伸缩使用和验证 2. 持久化存储2.1 emptyDir 1. k8s弹性伸缩 k8s弹性伸缩&#xff0c;需要附加插件heapster 1.1 安装heapster监控 使用heapster(低版本)可以监控pod压力大不大 使用hpa调节pod数量&#xff0c;自动扩容或…

chatgpt3.5和chatgpt4的区别

ChatGPT4是基于GPT-3模型的一个实例&#xff0c;但ChatGPT4已经进行了进一步的改进和优化。GPT-3&#xff08;第三代生成式预训练模型&#xff09;是OpenAl开发的一个大型语言模型&#xff0c;它在很多自然语言处理任务中表现出色。 ChatGPT4继承了GPT-3的基本架构和能力&…

清风数学建模笔记-聚类算法

K-maens算法&#xff1a; 算法的原理&#xff1a; 在论文中时&#xff0c;可以把一些可以流程化的算法的流程图加上去 优点&#xff1a; 缺点&#xff1a; 点容易受异常值的影响&#xff0c;且受影响较大 k-means算法&#xff1a; 使用SPSS进行聚类分析&#xff1a; S默认使用…

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…

深度学习 | 多模态算法

AIGC也就是AI内容生成已经成为新一轮人工智能发展的热点和必然趋势&#xff0c;它使得大规模高质量的创作变得更加容易。 一 、InstructGPT模型 1、GPT系列回顾 chatGPT和InstructGPT都使用了指示学习和基于人工反馈的强化学习来指导模型的训练&#xff0c;不同点仅仅是在采集数…

c语言:用结构体求平均分|练习题

一、题目 用c语言的结构体&#xff0c;求4位学生成绩的平均分 如图&#xff1a; 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> float aver();//声明平均分函数 void printScore();//声明打印函数 //设置结构体&#xff0c; struct student { …

JMeter CSV 参数文件的使用方法

.在 JMeter 测试中&#xff0c;参数化是非常重要的&#xff0c;参数化允许我们模拟真实世界中的各种情况。本文我们将探讨如何在 JMeter 中使用 CSV 参数文件。 创建 CSV 文件 首先&#xff0c;我们需要创建一个逗号分隔的值&#xff08;CSV&#xff09;文件&#xff0c;其中…

CompressAI:深度学习与传统图像压缩

1、图像压缩算法原理 传统的有损图像压缩方法&#xff0c;如JPEG &#xff0c; JPEG2000 &#xff0c; HEVC或AV1或VVC&#xff0c;在类似的编码方案上进行了迭代改进&#xff1a;将图像划分为像素块&#xff0c;使用变换域通过线性变换(例如:DCT或DWT)去相关空间频率&#xf…

SpringBoot使用支付宝沙箱环境进行仿真支付

目录 一、进入支付宝开发平台—沙箱环境 二、点击沙箱进入沙箱环境 三、Java二维码生成技术 1、导入依赖 2、生成指定url对应的二维码图片 四、支付接口 1、保存好沙箱应用里面的公钥私钥 2、 测试接口 3、扫码 4、买家结果 5、卖家结果 五、回调接口 1、使用内网…

el-select 多选,选有一个未选择的选项

多选有未选择这个选项后。会出现一个情况&#xff0c;绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理&#xff0c;选择&#xff08;未选择&#xff09;就清除&#xff08;其它的选择&#xff09;&#xff0c;选择&#xff08;cpu&#xff09;就清除&#xff08;未选…