Spring—Spring AOP1

news2025/1/22 8:36:47

文章目录

  • AOP概念的引入
  • AOP相关的概念
    • 1.AOP的概述
    • 2. AOP的优势
    • 3. AOP的底层原理
    • 如何利用AOP对原有业务进行增强
    • 利用注解方式
    • 切入点表达式
  • AOP相关的术语

————————————————————————————————

AOP概念的引入

首先我们来看一下登录的原理
如上图所示这是一个基本的登录原理图,但是如果我们想要在这个登录之上添加一些新的功能,比如权限校验
那么我们能想到的就有两种方法:

①:通过对源代码的修改实现
②:不通过修改源代码方式添加新的功能 (AOP)

在这里插入图片描述

AOP相关的概念

1.AOP的概述

什么是AOP的技术?
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程
AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构

AOP最早由AOP联盟的组织提出的,制定了一套规范.Spring将AOP思想引入到框架中,必须遵守AOP联盟的规范

通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术

AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(事务管理、安全检查、缓存)

为什么要学习AOP,可以在不修改源代码的前提下,对程序进行增强!!

2. AOP的优势

运行期间,不修改源代码的情况下对已有的方法进行增强
优势:

  1. 减少重复的代码
  2. 提供开发的效率
  3. 维护方便

3. AOP的底层原理

JDK的动态代理技术
1、为接口创建代理类的字节码文件
2、使用ClassLoader将字节码文件加载到JVM
3、创建代理类实例对象,执行对象的目标方法
cglib代理技术
为类生成代理对象,被代理类有没有接口都无所谓,底层是生成子类,继承被代理类

如何利用AOP对原有业务进行增强

新写好的功能插入原有的业务
1、连接点(主观选定的)
类当中哪些方法可以增强,哪些方法就是连接点
2、切入点
实际被增强的方法才是切入点
3、通知(增强)

  • 实际被增强的逻辑部分被称为通知
  • 通知的使用方式有很多种
    • ①前置通知:通知在切入点之前执行
    • ②后置通知:通知在切入点之后执行
    • ③环绕通知:通知在切入点执行之前和之后都执行一次
    • ④异常通知:当切入点发生异常的时候通知执行
    • ⑤最终通知:无论切入点是否发生异常都会执行 ---->类似try …catch…finally中的finally

4、切面
切面是一个动作,将通知切入到切入点的过程;
主要功能–性能监控、事务管理、日志记录

利用注解方式

aspectj:帮助使用AOP的工具

-1-Spring.xml文件
<context:component-scan base-package="com.qcby.service"/>
<!--aspectj:帮助使用AOP的工具-->
<aop:aspectj-autoproxy/>
------------------------------------------------------------
-2-UserService文件
@Component("user")
public class UserService {
    public void add(){
        System.out.println("add添加==");
    }
    public void update(){
        System.out.println("update修改==");
    }
    //切入点
    public void login(){
        System.out.println("login登录==");
    }
}
------------------------------------------------------------
-3-Demo.java文件
@Component("demo")
@Aspect
public class Demo {
    //通知(增强)
//    @Before(value = "execution(public void com.qcby.service.UserService.login())")
//    @AfterReturning(value = "execution(public void com.qcby.service.UserService.login())")
//    @After(value = "execution(public void com.qcby.service.UserService.login())")
//    @AfterThrowing(value = "execution(public void com.qcby.service.UserService.login())")

    public void test(){
        System.out.println("测试。。。");
    }

    /* 环绕通知 */
    @Around(value = "execution(public void com.qcby.service.UserService.login())")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        loginBefore();
        proceedingJoinPoint.proceed();/* 执行切入点 */
        loginAfter();

    }
    public void loginBefore(){
        System.out.println("登陆前--校验");
    }
    public void loginAfter(){
        System.out.println("登陆后--权限验证");
    }
}

切入点表达式

execution(public void com.qcby.service.UserService.login())
execution( [修饰符] [返回值类型] [全方法名] (参数) )
修饰符:可以省略不写
返回值类型:不可以省略,可以用 * 来代替
全方法名:也可以省略,可以用 * 来代替(com.*)
参数:切入点没有参数不用管,有参数时用两个点(…)代替就行

AOP相关的术语

Joinpoint(连接点) 类里面有哪些方法可以增强这些方法称为连接点

Pointcut(切入点) – 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义

Advice(通知/增强)-- 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Aspect(切面)-- 是 切入点+通知 的结合,以后咱们自己来编写和配置的

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

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

相关文章

【云原生 | Kubernetes 实战】16、K8s 配置管理中心 ConfigMap 实现微服务配置管理

目录 一、ConfigMap 概述 1.1 什么是 ConfigMap&#xff1f; 1.2 ConfigMap 能解决哪些问题&#xff1f; 1.3 ConfigMap 应用场景 1.4 局限性 二、ConfigMap 创建方法 2.1 根据字面值创建 ConfigMap 2.2 基于文件创建 ConfigMap 2.3 基于目录创建 ConfigMap 2.4 编…

【大数据系列之MySQL】(二十二):MySQL中的分组查询group by

对于常见的函数都是单行函数&#xff0c;说白了就是一一映射&#xff0c;输入一个值则输出对应的值&#xff0c;但是MySQL中还存在聚合函数就是输入一组值则返回一个值&#xff0c;常见的例如&#xff1a;sum、max等 很多时候需要对数据中的某些字段进行分组&#xff0c;探究每…

%27 CORS 跨域资源共享

1、CORS &#xff08;跨域资源共享&#xff09; 由一系列的 HTTP 响应头组成&#xff0c;这些响应头可以决定浏览器是否阻止前端 js 代码跨域获取资源 2、CORS 的响应头 &#xff08;1&#xff09;、Access-Control-Allow-Origin res.setHeader(‘Access-Control-Allow-Origin’…

web:常见安全问题

一、XSS XSS(Cross-Site Scripting)&#xff0c;跨站脚本攻击&#xff0c;因为缩写和css重叠&#xff0c;所以只能叫XSS。跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。 跨站脚本攻击有可能造成一下影响&#…

记一次赤裸裸的教训:All elements are null

wshanshi&#xff1a;记一次赤裸裸的教训…All elements are null… 一、异常信息 数据库查询统计相关业务&#xff0c;未使用分组group by&#xff0c;仅单独使用聚合函数。如下图所示&#xff0c;使用了SUM()函数。 假如数据库中未匹配到相关数据&#xff0c;结果集用List接…

希尔伯特-包络分析步骤与实例

希尔伯特-包络分析流程 对于齿轮箱振动信号而言&#xff0c;由于存在多对齿轮同时参与啮合&#xff0c;那么&#xff0c;测量得到的信号将可能出现多个以齿轮啮合频率或及谐频为载波频率、轴频为调制频率的幅值调制、频率调制或混合调制的情况&#xff0c;除此之外&#xff…

logback+slf4j日志详解

前言 项目中日志系统是必不可少的&#xff0c;目前比较流行的日志框架有log4j、logback等&#xff0c;可能大家还不知道&#xff0c;这两个框架的作者是同一个人&#xff0c;Logback旨在作为流行的log4j项目的后续版本&#xff0c;从而恢复log4j离开的位置。 另外 slf4j(Simp…

第二证券|昨日涨停,今日1分钟闪崩跌停,超1亿资金排队“出逃”!

养老概念股悦心健康&#xff08;SZ002162&#xff09;在接连2个涨停后&#xff0c;12月21日早盘&#xff0c;悦心健康大幅低开&#xff0c;1分钟闪崩跌停。 值得注意的是&#xff0c;20日盘后龙虎榜数据显现&#xff0c;万和证券股份有限公司成都通盈街证券营业部净买入1492.92…

HttpUnit是什么?如何应用?

推荐阅读&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 什么是HttpUnit? HttpUnit是基于JUnit构建的一个开源的测试框架&#xff0c;专门针对Web应用的测试&#xff0c;用于解…

TM32 DMA1和DMA2通道一览表、STM32F103C8T6定时器通道对应的引脚

TIM1_BRK_IRQn 24, TIM1_UP_IRQn 25, TIM1_TRG_COM_IRQn 26, TIM1_CC_IRQn 27, TIM2_IRQn 28, TIM3_IRQn 29, 这个函数TIM_SetCompare1&#xff0c…

计算机毕设Python+Vue学习互助平台网站(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Ma…

Redhat rpm常用命令以及如何配置yum软件仓库使用yum install

yum 软件仓库配置教程一、RPM&#xff08;红帽软件包管理器&#xff09;二、Yum 软件仓库简介三、注册Red Hat开发者四、配置 Yum 软件仓库一、RPM&#xff08;红帽软件包管理器&#xff09; 在 RPM&#xff08;红帽软件包管理器&#xff09;公布之前&#xff0c;要想在 Linux…

如何用 Python 在 Excel 中画柱状图

我们手动在 Excel 表格中画柱状图是很简单的事情&#xff0c;但是一旦这种简单的工作需要每天都做&#xff0c;那么最好的办法就是用 Python 来自动完成。 今天分享一招&#xff0c;如何用 Python 在 Excel 中画柱状图。 这里借助于工具 openpyxl&#xff0c;如果有更好的工具…

2. 【gRPC系列学习】 创建一元gRPC的客户端与服务端

学习讲求循序渐进,在分析代码原理之前应该熟练使用,本节我们一起搭建最简单一元gRPC模式,其中也包含安装protoc工具。 1. 创建项目目录结构 pb文件夹用于存放proto文件以及生成的pb文件 client文件夹存放客户端代码 server文件夹存放服务端代码 现在并未创建这几个文件,里面…

更懂城市、更懂人:闪马智能再添双认证

在中国工程院院刊《Engineering》刚刚发布的“2022全球十大工程成就”中&#xff0c;北斗卫星导航系统、嫦娥探月工程以及新冠病毒疫苗研发应用等重大创新&#xff0c;无不显现出人类推动科技发展边界突破的决心和勇气&#xff0c;为人类文明进步提供不竭动力。 眼下&#xff…

Pegasus Serial Port Tool @ Simplicity Version 串口测试工具简化版发布

Pegasus Serial Port Tool Simplicity Version 串口测试工具简化版发布 基于Electron桌面软件开发平台制作的PSPT ( Pegasus Serial Port Tool ) 串口测试工具发布简化版。免费用于任何个人和商业环境使用。 平台&#xff1a;Windows 11 / Windows 10 / Windows 7 介绍&…

设计模式原则 - 迪米特法则(六)

迪米特法则一 官方定义基本介绍二 案例演示普通实现方式案例分析迪米特法则方式三 注意事项一 官方定义 迪米特法则&#xff08;Law of Demeter, LoD&#xff09;是1987年秋天由lan holland在美国东北大学一个叫做迪米特的项目设计提出的&#xff0c;它要求一个对象应该对其他对…

机器学习100天(十五):015 逻辑回归基本原理

机器学习100天,今天讲的是:逻辑回归基本原理 一、线性回归与逻辑回归 我们之前介绍过线性回归,我们知道线性回归用于数值预测,例如房屋价格预测、信用卡额度预测等。线性回归最重要的一点就是它的预测值,即因变量一定是连续值,比如说房价。 而逻辑回归,它不是线性预测…

python数学建模--灰色预测

目录灰色预测一阶灰色方程GM(1,1)建模步骤应用及其求解步骤求级比一次累加序列求参数矩阵uuu时间响应式求预测序列模型检验实际值与预测值比较及可视化二阶灰色方程GM(2,1)灰色预测 灰色预测模型是通过少量的、不完全的信息&#xff0c;建立数学模型做出预测的预测方法&#x…

一篇文章彻底明白重要概念——注解

1. 注解基本概念 注解&#xff0c;什么是注解&#xff1f; 打开百度搜索 好&#xff0c;看不懂 没关系 一步一步慢慢来 先不管注解&#xff0c;注释这个概念应该就很熟悉了&#xff0c;文档注释&#xff0c;单行注释&#xff0c;多行注释 注释是对一段程序&#xff0c;一…