当前位置: 首页 > news >正文

郑州影楼网站建设/近期重大新闻

郑州影楼网站建设,近期重大新闻,北京的网站设计,网站织梦用字体矢量图做图标前言: 在前面我们已经粗略的介绍了什么是AOP以及各种基础知识点,而本篇我们将聚焦于AOP的细节,详细的讲解一下AOP中的通知类型,通知顺序,切入点表达式以及连接点。通过对AOP的熟练掌握,我们可以快速编写出低…

前言:

        在前面我们已经粗略的介绍了什么是AOP以及各种基础知识点,而本篇我们将聚焦于AOP的细节,详细的讲解一下AOP中的通知类型,通知顺序,切入点表达式以及连接点。通过对AOP的熟练掌握,我们可以快速编写出低耦合度的代码。

目录

前言:

通知类型:

通知以及切面顺序:

通知顺序从先到后分别为:

切面优先级从前到后分别为:

切入点表达式:

总结:


通知类型:

在前面我们使用的通知类型都是环绕通知

而在AOP中还有很多的通知类型:

  1. 前置通知(Before Advice):在目标方法执行之前执行的通知。它可以用于执行一些预处理操作,比如安全检查、参数验证等。

  2. 后置通知(After Advice):在目标方法执行之后(不考虑方法是否出现异常)执行的通知。它可以用于执行一些清理操作,比如释放资源、记录操作日志等。

  3. 返回通知(After Returning Advice):在目标方法成功执行并返回结果之后执行的通知。可以获取目标方法的返回值,并进行相应的处理。

  4. 异常通知(After Throwing Advice):在目标方法抛出异常时执行的通知。它可以用于捕获目标方法抛出的异常,并进行相应的处理或记录错误信息。

  5. 环绕通知(Around Advice):在目标方法执行之前和之后都可以执行的通知。环绕通知可以完全控制目标方法的执行过程,包括参数的传递、调用目标方法、异常的处理等。

这些通知类型可以根据实际需求选择使用,并结合切入点(Pointcut)定义来确定在哪些连接点上触发对应的通知。通过使用各种通知类型,可以实现对横切关注点的精确控制,并在目标对象的核心业务逻辑与横切逻辑之间实现解耦。

@Around环绕通知需要自己调用 ProceedingJoinPoint.proceed()来让原始方法执行,而其他的通知不需要考虑让目标方法执行

@Around环绕通知的返回值,必须指定为object类来接收原始方法的返回值

通知以及切面顺序:

如果有多个切面的切入点都匹配到了目标方法,那么在目标方法运行的时候,多个通知方法都会执行,那么就会产生一个先后顺序

通知顺序从先到后分别为:

  1. 环绕通知(Around Advice):环绕通知的执行优先于其他通知。它包裹着目标方法的执行,并可以在方法执行前后进行额外的处理。环绕通知可以决定是否调用目标方法,也可以自定义目标方法的输出结果。

  2. 前置通知(Before Advice):前置通知在目标方法执行前被调用。它可以用于执行一些预处理操作,例如参数校验、安全检查等。多个前置通知按照配置的先后顺序执行。

  3. 后置通知(After Advice):后置通知在目标方法执行后(不考虑方法是否出现异常)被调用。它可以用于执行一些清理操作,比如资源释放、记录操作日志等。多个后置通知按照配置的先后顺序执行。

  4. 返回通知(After Returning Advice):返回通知在目标方法成功执行并返回结果后被调用。它可以获取目标方法的返回值,并进行相应的处理。多个返回通知按照配置的先后顺序执行。

  5. 异常通知(After Throwing Advice):异常通知在目标方法抛出异常后被调用。它可以捕获目标方法抛出的异常,并进行相应的处理或记录错误信息。多个异常通知按照配置的先后顺序执行。

需要注意的是,同一个切面中的多个通知按照配置的先后顺序执行,而不同切面之间的通知执行顺序取决于切面的优先级。可以通过AOP框架的配置来控制通知的顺序。

切面优先级从前到后分别为:

  1. 注解配置优先级高:如果切面使用注解配置,并且配置了优先级属性,则优先级高于其他方式设置的切面。

  2. 显式设置优先级高:如果通过编程方式或XML配置显式设置了切面的优先级属性,优先级高于默认设置的切面。

  3. 默认设置:如果没有显式设置切面的优先级,AOP框架通常会给予切面一个默认的优先级顺序,例如按照切面加载的顺序确定优先级。

使用切面的优先级可以确保对同一个连接点的处理顺序,从而避免不同切面之间的冲突或干扰。

切入点表达式:

  • 切入点表达式:描述切入点方法的一种表达式。
  • 作用:主要用来决定项目中的哪些方法需要接入通知。

常见形式:

        1.execution(......):根据方法的签名来匹配

@Around("execution(public void com.example.MyClass.myMethod(..))")
public void aroundMyMethod(ProceedingJoinPoint joinPoint) throws Throwable {}

        2.@annotation(......):根据注解进行匹配

@Around("@annotation(com.example.MyAnnotation)")
public void aroundAnnotatedMethods(ProceedingJoinPoint joinPoint) throws Throwable {}

通配符描述切入点: 

  1. * 通配符:表示匹配零个或多个字符。在AOP中,* 通配符可以用于匹配任意数量的任意字符。例如,com.example.*Service 可以匹配任何以 “Service” 结尾的类名,并位于 “com.example” 包下的类。

  2. .. 通配符:表示匹配任意多层级的目录或包。在AOP中,.. 通配符可以用于匹配任意多层级的目录路径或包路径。例如,com.example..*Service 可以匹配任何以 “Service” 结尾的类,并位于 “com.example” 包及其子包下的类。

 扩展切入点表达式功能:

切入点表达式可以使用类似于正则表达式的语法,将上述元素组合起来进行更精确的匹配。同时,AOP框架也提供了一些特殊的语法和关键词来扩展切入点表达式的功能,例如:

  • &&:逻辑与操作符,用于将多个关键元素连接起来,表示需要同时满足多个条件。

  • ||:逻辑或操作符,用于将多个关键元素连接起来,表示满足任意一个条件即可。

  • !:逻辑非操作符,用于对关键元素的匹配结果取反。

  • @target:用于匹配目标类上应用了特定注解的连接点。

  • @within:用于匹配目标类及其子类上应用了特定注解的连接点。

切入点表达式的准确使用可以帮助开发人员精确地选择目标连接点,并将切面逻辑应用到指定的位置,避免不必要的拦截和干扰,提高AOP的效率和精度。

总结:

                本文我们对AOP中的一些知识点进行了深入解析,而这些知识点在实际使用中的利用程度很高,因此我们要熟练的掌握这些知识点。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关文章:

【Spring内容进阶 | 第三篇】AOP进阶内容

前言: 在前面我们已经粗略的介绍了什么是AOP以及各种基础知识点,而本篇我们将聚焦于AOP的细节,详细的讲解一下AOP中的通知类型,通知顺序,切入点表达式以及连接点。通过对AOP的熟练掌握,我们可以快速编写出低…...

华为云ModelArts:引领AI艺术创作的未来,让人人都可以成为“艺术家”!

随着科技的飞速发展,艺术创作逐渐告别传统的画布和画笔,开始走向数字化、智能化的新时代。在这个蓬勃发展的领域中,华为云ModelArts以其强大的功能和出色的性能引领着AI艺术创作的未来。 华为云ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处…...

Elasticsearch:如何从 Elasticsearch 集群中删除数据节点

Elasticsearch 集群通常包含多个节点,并且可能存在需要从集群中删除节点的情况。 应谨慎执行此过程,以确保数据的完整性和可用性。 在本文中,我们将引导你完成从 Elasticsearch 集群安全删除节点的步骤。 确保集群是绿色的 在尝试从 Elastic…...

长假回归,回顾一下所有的电商API接口

淘宝API接口 item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论 获取测试keyitem_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item_search…...

认识计算机主板

目录 定义主要部件简单图示 主要功能 定义 计算机主板(Motherboard)是计算机系统中的核心组件之一,也被称为系统板、主板或母板。它是一个电子电路板,用于连接和支持计算机的各种硬件组件,包括中央处理器(…...

PHP乱七八糟面试题

1、请解释PHP中的JWT是什么? JWT(JSON Web Token)是一种用于认证和授权的标准,可以在不同的系统之间安全地传递信息。 在PHP中,可以使用各种JWT库来生成和解析JWT,JWT包含了一些元数据和签名, …...

pom管理规范

0. 引言 在单机架构下,我们只需要将我们的依赖在pom中引入。但是过渡到微服务架构后,会涉及到多模块引用相同的依赖,多模版之间依赖的版本太过分散难以管理的问题。 这就需要我们利用maven中依赖传递的特性,结合dependencyManage…...

AI大模型的安全隐患问题与新兴Anthropic新势力涌动

引言: 无论从社会层面或技术层面,大模型的安全隐患都是一个不容小觑的话题。也正因此,ChatGPT 初兴起时,国内的 To C 大模型产品一时受阻。而尽管 9 月初第一批 8 家大模型通过备案,各家厂商对大模型的安全问题也不敢…...

slamplay:用C++实现的SLAM工具集

0. 项目简介 slamplay 是一个功能强大的工具集合,可用于开始使用 C 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能 后端框架(g2o、gtsam、ceres、se-sync 等)、 前端工具(opencv、…...

IPT2602协议-USB 快速充电端口控制器

产品描述: IPT2602是一款USB端口快速充电协议控制芯片。IPT2602智能识别多种快速充电协议,对手机等受电设备进行快速充电。IPT2602根据受电设备发送的电压请求能够精确的调整VBUS输出电压,从而实现快速充电。 IPT2602在调整5V输出电压前会自动…...

Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)

目录 前言插件安装方法插件一:文献翻译插件(pdf-translate)插件二:文献附件管理(ZotFile)插件三:中文文献插件(茉莉花)插件四:Sci-Hub 自动下载文献&#xff…...

Titus网关中的缓存一致性机制

API网关引入缓存可以在不影响数据一致性的前提下,有效优化接口时延。本文介绍了Netflix在Titus网关上引入缓存的实践,比较了有无缓存对访问时延的影响。原文: Consistent caching mechanism in Titus Gateway 前言 Titus是Netflix的云容器运行时&#xf…...

flutter开发实战 - inappwebview设置cookie

flutter开发实战-inappwebview设置cookie 在使用inappwebview时候,需要设置cookie,这里记录一下 一、在initialUserScripts中设置cookie 在inappwebview中有一个initialUserScripts,可以初始化设置cookie等,我们可以通过该属性…...

零基础如何自学网络安全,基于就业前景全方位讲解,包教包会

你是否对网络空间安全充满好奇?想要解开网络世界神秘的面纱?你是否对黑客技术着迷?而找不到合适的学习途径?你是否遭到过各种各样的网络攻击,却因知识的匮乏束手无策? 那么接下来将为你全面介绍&#xff0c…...

Java项目防止SQL注入的几种方案

目录 一、什么是SQL注入? 二、Java项目防止SQL注入方式 1、PreparedStatement防止SQL注入 2、mybatis中#{}防止SQL注入 3、对请求参数的敏感词汇进行过滤 4、nginx反向代理防止SQL注入 一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数…...

Win11 安装安卓子系统方法教程

WIN11安装安卓子系统 准备工作下载安装安装完成使用adb连接子系统结束 准备工作 开启电脑中的 控制面板>>>>程序和功能>>启用或关闭Windows功能>>>找到“Hyper-V”,把勾都勾上,确定,完成安装,并重启电…...

golang pg 数据库不存在 就创建 --chatPGT

问:linkOrCreateDatabase(addr ), 函数执行 连接 pg数据库,若数据库 不存在就创建 gpt: 要在 Go 中连接到 PostgreSQL 数据库并在数据库不存在时创建数据库,你可以使用 github.com/lib/pq 包以及 database/sql 包。以下是一个示例&#xff1…...

VUE3照本宣科——eslint与prettier

VUE3照本宣科——eslint与prettier VUE3照本宣科系列导航 前言一、eslint1.配置文件2.配置规则3.忽略错误 二、prettier三、总结 VUE3照本宣科系列导航 1.VUE3照本宣科——认识VUE3 2.VUE3照本宣科——应用实例API与setup 3.VUE3照本宣科——响应式与生命周期钩子 4.VUE3照本宣…...

【谷粒学院】Maven加载问题

问题 maven加载项目时候&#xff0c;默认不会加载src-java文件夹里面xml类型文件的 解决方案 直接赋值xml文件到target目录通过配置实现 &#xff08;1&#xff09;在pom.xml文件中配置 <!-- 项目打包时会将java目录中的*.xml文件也进行打包 --> <build><re…...

PostgreSQL数据库中实现字段递增

在 PostgreSQL 中&#xff0c;可以使用序列&#xff08;sequence&#xff09;来实现字段的递增。序列是一种特殊的对象&#xff0c;用于生成唯一的递增数字。 首先&#xff0c;您需要创建一个序列对象。可以使用以下命令创建一个名为 "my_sequence" 的序列&#xff…...

深度学习——深度学习计算二

深度学习——深度学习计算二 文章目录 前言三、延后初始化四、自定义层4.1. 不带参数的层4.2. 带参数的层 五、读写文件5.1. 加载和保存张量5.2. 加载和保存模型参数 六、GPU6.1. 计算设备6.2. 张量与GPU6.3. 神经网络与GPU 总结 前言 延续上一章的学习&#xff0c;本章继续记…...

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Badge

可以附加在单个组件上用于信息标记的容器组件。该组件从API Version 7开始支持。 支持单个子组件。子组件类型&#xff1a;系统组件和自定义组件&#xff0c;支持渲染控制类型&#xff08;if/else、ForEach和LazyForEach&#xff09;。 一、接口 方法1&#xff1a; Badge(value…...

在Flink中集成和使用Hudi

本文介绍在Flink 中集成和使用Hudi。介绍Flink如何将Streaming引入Hudi。在Hudi上使用Flink,并学习Flink读写Hudi的不同模式: Flink SQL客户端写入:Flink SQL客户端写入(读取)Hudi。 配置:对于全局配置,通过$FLINK_HOME/conf/FLINK-conf.yaml进行设置。对于每个作业配置…...

docker搭建Jenkins及基本使用

1. 搭建 查询镜像 docker search jenkins下载镜像 docker pull jenkins/jenkins启动容器 #创建文件夹 mkdir -p /home/jenkins_home #权限 chmod 777 /home/jenkins_home #启动Jenkins docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home…...

CSS初体验

目录 一、CSS初体验 二、CSS引入方式 三、选择器 3.1 标签选择器 3.2 类选择器 3.3 id选择器 3.4 通配符选择器 四、盒子尺寸和背景色 五、文字控制属性 5.1 字体大小 5.2 字体样式(是否倾斜) 5.3 行高 5.3.1 单行文字垂直居中 5.4 字体族 5.5 font复合属性 5.…...

python性能分析

基于cProfile统计函数级的时延&#xff0c;生成排序列表、火焰图&#xff0c;可以快速定位python代码的耗时瓶颈。参考如下博文结合实操&#xff0c;总结为三步&#xff1a; 使用 cProfile 和火焰图调优 Python 程序性能 - 知乎本来想坐下来写篇 2018 年的总结&#xff0c;仔细…...

苹果手机怎么备份所有数据?2023年iPhone 15数据备份常用的3种方法!

当苹果手机需要进行刷机、恢复出厂设置、降级iOS系统等操作时&#xff0c;我们需要将自己的iPhone数据提前进行备份。 特别是在苹果发布新iOS系统时&#xff0c;总有一些小伙伴因为升降级系统&#xff0c;而导致了重要数据的丢失。 iPhone中储存着重要的照片、通讯录、文件等数…...

【RV1103】如何新增一个新板级配置

文章目录 新建一个板级配置文件 新建一个板级配置文件 我的目标 通过./build.sh lunch 来选择我的板子配置。 在目录sdk/project/cfg目录下新建一个xxxx.mk文件&#xff0c;文件名字格式如下&#xff1a; BoardConfig-"启动介质"-"电源方案"-"硬件…...

ThreeJS-3D教学五-材质

我们在ThreeJS-3D教学二&#xff1a;基础形状展示中有简单介绍过一些常用的材质&#xff0c;这次我们举例来具体看下效果&#xff1a; 代码是这样的&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…...

递归

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;汉诺塔 &#x1f449;&…...