AOP理解

AOP就是面向特定的方法进行编程,在不改动原始方法的基础上,可以增强原始方法的功能,或者改变某些功能,我们可以通过AOP记录数据库的操作日志

AOP的底层实现就是动态代理技术,在执行原始方法前,生成一个代理方法,并对原始方法进行增强,就是把通知方法里的逻辑加入进去,最后执行的是代理后的增强方法,

使用AOP首先在pom文件导入相应坐标

编写AOP程序:

@Component表示将该类交给ioc容器进行管理

@Aspect表示该类是AOP类

@Around和@Before,@After,@AfterReturning,@AfterThrowing是五大通知注解,里面的切入点表达式是针对哪些方法进行AOP编程

1.通知

注意,环绕通知是最特别的通知,它注释的方法必须是Object类型,因为它要定义连接点ProceedJoinPoint来调用原始方法,来接收原始方法的返回值,且返回方法执行后的Object对象

其他通知不需要考虑原始方法执行

不同通知之间存在默认的执行顺序,环绕通知前,前置通知,返回后通知,后置通知,环绕后通知

或        环绕通知前,前置通知,异常后通知,后置通知

相同通知之间也有默认的执行顺序,按照切面类的自然排序执行,即字母排序大小,如果不想这样执行,可以添加@Order注解指定执行优先级,优先级是@Order属性的数字大小,越小越先执行

2.切入点PointCut

切入点定义了匹配连接点的条件,将公共的切入点表达式抽取出来。

可以这样定义一个切入点方法,这样其他通知可以不再使用execution来配置相同的切入点表达式,直接用对应的切入点方法就好,但注意这个切入点方法的访问修饰符类型,private只能在本类中使用,在外部的切面类使用,则需要更大的访问权限。

3.切入点表达式

该表达式就是决定哪些方法需要加入通知中

第一种方法通过execution,根据方法的签名匹配

一般都会省略访问修饰符,返回值和异常,但不要省略包名和类名,注意如果不省略方法参数,该参数的路径必须写全限定路径,而且尽量缩小切入点的匹配范围

当要匹配多个方法,则可以使用 || ,&&,!来组合复杂的表达式

第二种方法通过@annotation,表示匹配有特定注解的方法

先自定义一个注解,添加@Retention,表示该注解什么时候生效

@Target表示该注解可以应用在什么地方,比如可以应用在方法上。

然后在对应的原始方法上添加自定义注解,我这里是@MyLog

然后用annotation来替换execution,即匹配方法上添加了@MyLog注解的原始方法

4.连接点,就是被AOP控制的方法

以上是around环绕通知获取原始方法的相关信息,其他通知方法只需换JoinPoint来获取即可,对应的api一样的

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

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

相关文章

南京观海微电子---PCIe协议接口

1. PCIe引脚定义 PCI Express,官方简称PCIe,是计算机总线的一个重要分支, 插槽图片如下: 下表列出在边缘连接器上的PCI Express卡两侧的导线。在印刷电路板(PCB)的焊接侧为A侧,并且组件侧的B侧。PRSNT1# 和…

Uber/Google Golang编码标准深度分析

良好的代码风格对于开发优秀的产品至关重要,本文通过分析比较三部流传甚广的Golang代码风格指南,介绍了Go代码风格要点,并介绍了通过工具实现代码检查的方式。原文: Mastering Go: In-Depth Analysis of Uber and Google’s Coding Standards…

气相白炭黑外资垄断格局被打破 国内本土企业数量增加

气相白炭黑外资垄断格局被打破 国内本土企业数量增加 气相白炭黑又名气相二氧化硅,是一种无毒、无味、无嗅,无污染的非金属氧化物,主要由硅的卤化物在氢氧火焰中高温水解生成的带有表面羟基和吸附水的无定形的纳米级颗粒。气相白炭黑主要用于…

Unity 关节:铰链、弹簧、固定、物理材质:摩檫力、 特效:拖尾、

组件-物理-关节:铰链(类似门轴) 自动动作、多少力可以将其断开、 弹簧可以连接另一个刚体(拖动即可) 固定一般是等待一个断裂力,造成四分五裂的效果。 物理材质 设置摩檫力,则可以创造冰面的…

能量不等式证明

波动方程初值问题能量不等式的证明 Gronwall 不等式 若非负函数 G ( τ ) G(\tau) G(τ) 在 [ 0 , T ] [0,T] [0,T] 上连续可微, G ( 0 ) 0 G(0)0 G(0)0,且对 τ ∈ [ 0 , T ] \tau\in[0,T] τ∈[0,T]满足 d G ( τ ) d τ ≤ C G ( τ ) F ( τ …

27.基于springboot + vue实现的前后端分离-网上租赁交易系统(项目 + 论文)

项目介绍 本课题是根据用户的需要以及网络的优势建立的一个基于Spring Boot的网上租贸系统,来满足用户网络商品租赁的需求。本网上租贸系统应用Java技术,MYSQL数据库存储数据,基于Spring Boot框架开发。在网站的整个开发过程中,首…

XXE-XML实体注入漏洞

目录 1.xml基础 1.1什么是xml 1.2xml文档结构 1.3 什么是DTD 1.4 什么是实体 1.5 什么是外部实体 2.xxe漏洞 2.1xxe漏洞基本介绍 2.2xxe漏洞的危害 经典漏洞案例分析 3.xxe漏洞挖掘和利用 3.1. 识别潜在的XML入口 3.2. 检查XML处理逻辑 3.3. 构造试探Payload 常…

为什么企业CRM系统用不起来?提高使用率的有效策略揭秘

大家好,我是小编卡林,今天为大家带来的是文章是为什么企业CRM系统用不起来?CRM系统使用率低的原因有很多,其中一个共识是假如一款CRM管理系统让员工普遍认为只是领导查询自己工作的系统,那么,这个项目离失败…

LeetCode Python - 40.组合总和②

目录 题目答案运行结果 题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入…

直流负载原理与应用

直流负载是指能够消耗直流电能的设备或系统,在电力系统中,直流负载主要包括直流电动机、蓄电池、电解槽等。这些设备在运行过程中需要消耗大量的直流电能,因此对直流电源的稳定性和可靠性要求较高。本文将对直流负载的原理及其应用进行简要介…

如何实现class文件的反编译:java-decompiler 反编译工具

java-decompiler 反编译工具 😀 Java Decompiler 是Java反编译工具,可以对 Java 5 和更高版本的 class 文件进行反编译分析。 📝 主旨内容 Java Decompiler是一项开源工具,Java Decompiler工具不仅可以实现反编译.class文件&…

【Azure 架构师学习笔记】- Azure Private Endpoint

本文属于【Azure 架构师学习笔记】系列。 前言 公有云的其中一个特点是默认允许公网访问, 这就对企业环境带来风险,也是很多年前企业对公有云抵触的其中一个原因,现在这类问题已经很少,因为有了很多技术来确保云上的资源被安全地…