Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现,分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。

使用控制流切入点

由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造,尽管功能上没有那么强大。

本质上,Spring中的控制流切入点适用于类中给定方法或所有方法下的所有方法调用。

在这里插入图片描述
制流切入点非常有用,允许仅在另一个上下文中执行某个对象时才有选择地通知它。

但是,请注意,在其他切入点上使用控制流切入点会大大降低性能。

假设有一个事务处理系统,它包含一个TransactionService接口以及一个AccountService接口。

此时,希望应用后置通知,以便当TransactionService.ReverseTransaction()调用AccountService.updateBalance()方法更新账户余额时,将电子邮件通知发送给客户。

但在其他情况下则不会发送电子邮件。在这种情况下,控制流切入点是非常有用的。

在这里插入图片描述

使用组合切入点

在某些情况下,可能需要将两个或更多个切入点组合在一起以实现所需的目标。

假设想要切入bean上的所有getter和setter方法。

虽然getter方法有一个切入点,setter方法也有一个切入点,但是没有同时适用于这两种方法的切入点。

当然,可以用新的逻辑创建另一个切入点,但更好的方法是使用ComposablePointcut将两个切入点组合成一个切入点。

ComposablePointcut支持两种方法:union()和intersection()。

默认情况下,ComposablePointcut是通过一个匹配所有类的ClassFilter以及一个匹配所有方法的MethodMatcher来创建的,当然,也可以在构建过程中提供自己的初始ClassFilter和MethodMatcher。

union()和intersection()方法都被重载以接收ClassFilter和MethodMatcher参数。

可以通过传入ClassFilter、MethodMatcher或Pointcut接口的实例来调用ComposablePointcutunion()方法。联合操作的结果是,ComposablePointcut将在其调用链中添加“或”条件,以便与连接点进行匹配。

对于ComposablePointcut.intersection()方法也是如此,但添加的是“和”条件,这意味着如果想要应用通知,ComposablePointcut中的所有ClassFilter、MethodMatcher和Pointcut定义都应该匹配。

可以将其想象为SQL查询中的WHERE子句,其中union()方法类似于“or”运算符,而intersection()方法则类似于“and”运算符。

        // 创建一个可组合的切点对象pc,匹配所有类的任一方法ComposablePointcut pc = new ComposablePointcut(ClassFilter.TRUE, new SingMethodMatcher());// 将能匹配Talk方法的切点对象合并到pc中pc.union(new TalkMethodMatcher());// 将能匹配Rest方法的切点对象与pc进行交集匹配pc.intersection(new RestMethodMatcher());

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

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

相关文章

Python+Yolov5+Qt交通标志特征识别窗体界面相片视频摄像头

程序示例精选 PythonYolov5Qt交通标志特征识别窗体界面相片视频摄像头 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonYolov5Qt交通标志特征识别窗体界面相片视频摄像头》编写代码&a…

电子合同如何验证有效性?教你一眼避雷无效合同!

你是否收到过电子合同,却对它是否有效感到困惑? 要验证电子合同是否有效,首先要看它的电子签章是否符合要求。 电子签名怎么才可靠? 电子签名同时满足以下条件,就是可靠签名,也就是具有法律效力的电子签名…

Unity 旋转跟随

Unity 使用任意一个局部轴指向目标 效果: 主要用于在编辑器中可视化对象的朝向,同时提供了选择不同轴向的功能。在运行时,物体将根据所选择的轴向朝向目标,并在 Scene 视图中绘制一个带箭头的圆环。 定义轴向枚举:…

车联网的安全风险与应对措施

安全风险 1、恶意软件 攻击者可以通过入侵厂商或供应商网络,用恶意软件(如病毒、木马、勒索软件等)感染车联网系统组件,从而获得对车辆的控制权或窃取敏感信息。例如,一名安全研究人员成功入侵了特斯拉(T…

校园安全风险管理系统

随着社会的不断发展和进步,教育行业也逐渐走向了信息化、智能化管理。校园作为教育事业的重要场所,其安全和管理问题一直备受关注。为了确保校园的安全和管理,各种校园管理平台应运而生。 其中,凡尔码搭建的校园安全管理系统为校园…

CodeWhisperer:编码世界中的声音启迪者

人烟 导语: 在数字化时代,编码已经成为了一种不可或缺的技能。而 CodeWhisperer(编码世界中的声音启迪者)则以其卓越的技术和深厚的知识为人们带来了独特的启发和指导。本文将介绍 CodeWhisperer 的背景和成就,探讨他是…

PowerShell Instal 一键部署gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

土壤侵蚀模型地形因子计算工具(2.0版本)

土壤侵蚀模型地形因子计算工具(2.0版本) 土壤侵蚀模型地形因子计算工具(2.0版本)。该软件为符素华老师、刘宝元老师和周贵云老师开发的。2.0 版本在 1.0 版本的基础上修改了当坡长大于临界坡长后的坡长因子算法。2.0 中用整坡坡长因子计算公式…

nfs高可用部署

一、前言 为了避免nfs单点问题导致的服务不可用,使用以下架构实现nfs的高可用,keepalivedinotifyrsyncnfs,keepalived实现nfs的高可用,inotify持续监控nfs数据目录的变化,发生变化后通过rsync进行同步到备节点&#xf…

【北亚服务器数据恢复】san环境下LUN Mapping出错导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境: san环境下的存储上一组由6块硬盘组建的RAID6,划分为若干LUN,MAP到跑不同业务的服务器上,服务器上层是SOLARIS操作系统UFS文件系统。 服务器故障: 业务需求需要增加一台服务器跑新增的应用&#xf…

如何实现h5的抽奖功能

示例: 使用的是一个插件可以在多种环境下运行的插件:九宫格 LuckyGrid | 基于 Js / TS / Vue / React / 微信小程序 / uni-app / Taro 的【大转盘 & 九宫格 & 老虎机】抽奖插件 安装插件 # npm 安装 npm install lucky-canvas/vuelatest# 或者 yarn 安装 yarn add lu…

秋招复习篇之代码规范

目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…

复数值神经网络可能是深度学习的未来

一、说明 复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

Frappe Charts:数据可视化的强大工具

一、产品简介: 一个简单、零依赖、响应式的 开源SVG 图表库。这个图表库无论是数据更新还是屏幕大小变化,都能快速响应并更新图表。数据生成和悬停查看都有舒服的交互动效,体验感很好。不仅支持配置颜色,外观定制也很方便。还支持…

MYSQL分库分表常见问题

什么是分库 分库:是将一个数据库分成多个数据库,但是总表数不变,部署到不同机器,这样可以分担数据库的读写压力,提高系统的吞吐能力。 什么是分表 分表:就是一个表分成多个表,但是总体的库不…

k8s之陈述式资源管理

1.kubectl命令 kubectl version 查看k8s的版本 kubectl api-resources 查看所有api的资源对象的名称 kubectl cluster-info 查看k8s的集群信息 kubectl get cs 查看master节点的状态 kubectl get pod 查看默认命名空间内的pod的信息 kubectl get ns 查看当前集群所有的命…

[Python进阶] 操作注册表:winreg

5.22 操作注册表:winreg 5.22.1 注册表概念 在Windows系统中,注册表本质上就是一个数据库,其中存放着硬件、软件、用户、操作系统以及程序相关设置信息。我们除了使用Windows系统自带的regedit程序,也可以通过Python编程读取并操…

【React】echarts-for-react 的使用

文章目录 echarts-for-react :一个简单的 Apache echarts 的 React 封装配置项手册:https://echarts.apache.org/zh/option.html#title 安装依赖 $ npm install --save echarts-for-react# echarts 是 echarts-for-react的对等依赖,您可以使用自己的版本…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈,在打开某些游戏或软件的时候,Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失,软件无法启动”,不知道应该怎样办? 首先,我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么? …

Qt/C++音视频开发61-多屏渲染/一个解码渲染到多个窗口/画面实时同步

一、前言 多屏渲染就是一个解码线程对应多个渲染界面,通过addrender这种方式添加多个绘制窗体,我们经常可以在展会或者卖电视机的地方可以看到很多电视播放的同一个画面,原理应该类似,一个地方负责打开解码播放,将画面…