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.rhkb.cn/news/230768.html

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

相关文章

SpringBoot整合ElasticSearch实现CRUD操作

本文来说下SpringBoot整合ES实现CRUD操作 文章目录 概述项目搭建ES简单的crud操作保存数据修改数据查看数据删除数据 本文小结 概述 SpringBoot支持两种技术和es交互。一种的jest&#xff0c;还有一种就是SpringData-ElasticSearch。根据引入的依赖不同而选择不同的技术。反正作…

【如何选择Mysql服务器的CPU核数及内存大小】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

HackTheBox - Medium - Linux - Interface

Interface Interface 是一种中等难度的 Linux 机器&#xff0c;具有“DomPDF”API 端点&#xff0c;该端点通过将“CSS”注入处理后的数据而容易受到远程命令执行的影响。“DomPDF”可以被诱骗在其字体缓存中存储带有“PHP”文件扩展名的恶意字体&#xff0c;然后可以通过从其…

LC 2397. 被列覆盖的最多行数

2397. 被列覆盖的最多行数 2397. 被列覆盖的最多行数 文章目录 2397. 被列覆盖的最多行数二进制枚举代码实现&#xff1a; 递归回溯实现代码实现 Gospers Hack代码实现 难度&#xff1a; 中等 题目大意&#xff1a; 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matri…

Midjourney表情包制作及变现最全教程

盘点Midijourney&#xff08;AIGF&#xff09;热门赚米方法&#xff0c;总有一种适合你之AI绘画操作技巧及变现渠道剖析 【表情包制作】 首先我们对表情包制作进行详细的讲解&#xff1a; 当使用 Midjourney&#xff08;AIGF&#xff09; 绘画来制作表情包时&#xff0c;你可以…

python学完之后可以做什么,python学完可以做什么

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python学完可以做哪些工作&#xff0c;python学完之后可以做什么&#xff0c;今天让我们一起来看看吧&#xff01; Python是一种全栈的开发语言&#xff0c;你如果能学好Python&#xff0c;前端&#xff0c;后端&#x…

【Python机器学习】k近邻——k近邻分类

k-NN算法最简单的版本是只考虑一个最近邻&#xff0c;也就是想要预测的数据点最近的训练数据点&#xff0c;预测结果就是这个训练数据点的已知输出。 除了仅考虑最近邻&#xff0c;还可以考虑任意&#xff08;k个&#xff09;邻居&#xff0c;这也是k近邻算法名字的由来。在考…

Windows 安装配置 Anaconda、CUDA、cuDNN、pytorch-cuda全流程

Windows 安装配置 Anaconda、CUDA、cuDNN、pytorch-cuda全流程 1. 安装Anaconda 网址&#xff1a;https://repo.anaconda.com/archive/ 选择第一个下载即可 双击exe文件&#xff0c;按安装向导安装即可&#xff08;除安装路径自己选择外&#xff0c;其余均可按默认选项&#x…

kubeadm来快速搭建一个K8S集群

二进制搭建适合大集群&#xff0c;50台以下的主机 kubeadm更适合中下企业的业务集群 我们采用了二进制包搭建出的k8s集群&#xff0c;本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群&#xff0c;kubeadm更适合中小型企业的集群…

爬虫工作量由小到大的思维转变---<第三十四章 Scrapy 的部署scrapyd+Gerapy>

前言: scrapy-redis没被部署,感觉讲起来很无力;因为实在编不出一个能让scrapy-redis发挥用武之地的案子;所以,索性直接先把分布式爬虫的部署问题给讲清楚!! 然后,曲线救国式地再在部署的服务器上,讲scrapy redis我感觉这样才好! 正文: 现在还有不少人在用scrapy web进行爬虫管…

Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览

目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…

Ubuntu 22.04/20.04 安装 SSH

OpenSSH 是安全远程通信的重要工具&#xff0c;提供了一种安全的方式来访问和管理服务器。对于那些计划在 Ubuntu 22.04 Jammy Jellyfish 或其较旧的稳定版本的 Ubuntu 20.04 Focal Fossa 上安装 SSH 并启用它的人来说&#xff0c;了解其功能和优势至关重要。 OpenSSH的主要特…

node加速镜像源 管理工具nrm安装使用

我们在开发node.js的时候,经常会遇到某些包无法下载, 或者下载太慢, 还有需要加载我们自己是有源中的包的问题, 今天推荐给大家的这款 nrm 镜像源管理工具就是解决这类问题的. 安装 方法也很简单, 执行 npm install nrm -g 就可以安装 # 安装nrm npm install nrm -g# 添加…

普通用户用哪款电脑杀毒软件最好?

前言 各位小伙伴接触到电脑的时候&#xff0c;都一定有听过“电脑一定要安装杀毒软件”这句话。 毕竟在电脑诞生之初到今天&#xff0c;电脑木马和病毒依旧存在。 中了木马或病毒的电脑会出现什么现象&#xff1f;具体得看中了什么样的病毒。 但轻则资料泄漏、电脑瘫痪&…

CRYPTO现代密码学学习

CRYPTO现代密码学学习 RC4 加密算法RSA加密解密DES加密解密详解密钥的生成密文的生成 RC4 加密算法 简单介绍&#xff1a;RC4加密算法是一种对称加密算法&#xff0c;加密和解密使用同一个函数 初始化分为以下几个步骤 初始化存储0-255字节的Sbox(其实就是一个数组)填充key到…

【Bug解决】Failed to configure a DataSource

1、问题描述 SpringBoot项目在启动时报出下面的错误&#xff1a; Description: Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider…

什么是差值表达式

在Vue.js中&#xff0c;差值表达式是一种基本的数据绑定形式&#xff0c;用于将数据绑定到文档对象模型&#xff08;DOM&#xff09;上。差值表达式通常使用双大括号 {{ }} 来表示&#xff0c;这种语法非常直观。当Vue实例的数据发生变化时&#xff0c;差值表达式的内容也会相应…

css 编写圆角矩形只有左侧一半的样式

实现该样式&#xff1a;尺寸大小可自由调整修改 <div class"abc"></div>.abc{width: 50px;height: 300px;border: 1px solid red;border-right: none;border-top-left-radius: 10px;border-bottom-left-radius: 10px;}

设计模式:抽象工厂模式(讲故事易懂)

抽象工厂模式 定义&#xff1a;将有关联关系的系列产品放到一个工厂里&#xff0c;通过该工厂生产一系列产品。 设计模式有三大分类&#xff1a;创建型模式、结构型模式、行为型模式 抽象工厂模式属于创建型模式 上篇 工厂方法模式 提到工厂方法模式中每个工厂只生产一种特定…

(Java企业 / 公司项目)Nacos的怎么搭建多环境配置?(含相关面试题)(二)

上一篇讲了一个单体服务中配置&#xff0c;传统的Nacos配置但是在微服务架构当中肯定都是多环境下配置&#xff0c;比如生产环境&#xff0c;dev测试环境等等。 第一种方式模拟开始&#xff1a; 首先展示在生产环境中nacos如何配置&#xff0c;在模块下新建一个配置文件&…