spring framework 5.2 AOP - spring低级的api

内容目录

  • 1.Pointcut 切点
    • 切入点的操作
  • 2.Spring 中的通知 API
    • advice通知的生命周期

AOP的一般定义:

AOP是一种编程范式,用于将关注点(concerns)从应用程序的主要业务逻辑中解耦。
关注点是指在应用程序中横切多个模块或组件的功能,而不是特定于一个模块的功能。
AOP通过将这些关注点封装成切面(aspects)来实现,切面是由通知(advice)和切点(pointcut)组成的。
通知是在切点上执行的代码块,通常包括前置通知(before advice)、后置通知(after advice)、环绕通知(around advice)等。
切点是在应用程序中选择何处执行通知的规则或条件。
AOP可以提供更好的模块化、可维护性和可重用性,因为关注点的逻辑被集中管理,而不是分散在整个应用程序中。

在Java中,AOP通常使用框架来实现,如Spring Framework的AOP模块,它提供了一种方便的方式来定义切面、通知和切点,并将它们应用到应用程序中的组件上。通过使用AOP,开发人员可以更容易地处理横切关注点,从而改善代码的结构和可维护性。

1.Pointcut 切点

概念
Spring 的切入点(pointcut)模型使切入点重用独立于通知类型。 您可以使用相同的切点来定位不同的通知(advice)。

org.springframework.aop.Pointcut 接口是中心接口,用于将advice定位到特定的类和方法。 完整接口如下:

public interface Pointcut {ClassFilter getClassFilter();MethodMatcher getMethodMatcher();}

将切入点接口分为两部分,允许重用类和方法匹配部分以及细粒度组合操作(例如与另一个方法匹配器执行“联合”)。

ClassFilter 接口用于将切入点限制为一组给定的目标类。 如果 matches() 方法始终返回 true,则所有目标类都匹配。 以下代码显示了 ClassFilter 接口定义:

public interface ClassFilter {boolean matches(Class clazz);
}

MethodMatcher 接口定义:

public interface MethodMatcher {boolean matches(Method m, Class targetClass);boolean isRuntime();boolean matches(Method m, Class targetClass, Object[] args);
}

在上面的matches(Method, Class) 方法用于匹配这个切入点是否与目标类上的给定方法匹配。 可以在创建 AOP 代理时执行此匹配,以避免对每个方法调用进行测试。 如果二参数 matches 方法对于给定方法返回 true,并且 MethodMatcher 的 isRuntime() 方法返回 true,则在每次方法调用时都会调用三参数 matches 方法。 这使得切入点可以在目标建议开始之前立即查看传递给方法调用的参数。

大多数 MethodMatcher 实现都是静态的,这意味着它们的 isRuntime() 方法返回 false。 在这种情况下,永远不会调用三参数 matches 方法。

如果可能,尝试将切入点静态化,允许 AOP 框架在创建 AOP 代理时缓存切入点评估的结果。

切入点的操作

Spring 支持切入点上的操作(并集和交集)。

Union 并集表示任一切入点匹配的方法。

intersection 交集意味着两个切入点都匹配的方法。

Union 通常更有用。 您可以使用 org.springframework.aop.support.Pointcuts 类中的静态方法或使用同一包中的 ComposablePointcut 类来组合切入点。 然而,使用 AspectJ 切入点表达式通常是一种更简单的方法。

2.Spring 中的通知 API

advice通知的生命周期

每个advice都是一个 Spring bean。 advice实例可以在所有advice对象之间共享,也可以对于每个advice对象是唯一的。 这对应于每个类或每个实例的advice。

最常使用的是每个类通知。 它适用于一般advice,例如事务。 这些不依赖于代理对象的状态或添加新状态。 他们只是按照方法和参数执行。

每个实例的advice适合介绍,以支持 mixin。 在这种情况下,建议将状态添加到代理对象。

您可以在同一个 AOP 代理中混合使用共享建议和每个实例advice。

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

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

相关文章

【项目实战】Linux系统下jar包自启动

什么是jar包自启动 在Linux系统中,"jar包自启动"是指通过配置将Java程序打包成可执行的Jar文件,并设置其在系统启动时自动运行。以下是与jar包自启动相关的一些概念: Jar文件:Jar(Java Archive&#xff09…

05贪心:买卖股票的最佳时机 II

05贪心:买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II 这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入…循环反复。 如果想到其实最终利润是可以分解的,那么本题就很容易了&#xff01…

蓝牙核心规范(V5.4)10.10-BLE 入门笔记之SMP和安全性

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.概述 SMP是安全管理器协议,用于蓝牙低功耗系统的安全管理。SMP协议定义了配对和Key的分发过程的实现,以及用于实现这些方法的协议和工具。SMP的内容主要是配对和Key的分发,然后用Key对链路或数据进行加密 。 安全管理器协议(…

typedoc参数列表解释

输入选项 名称说明entryPoints这个选项用于指定Typedoc生成的文档的入口点。入口点是指被文档化的对象的定义所在的文件或模块。通过指定入口点,Typedoc可以找到被文档化的对象,并生成相应的文档。这个选项可以接受一个字符串或字符串数组,用…

K-最近邻算法

一、说明 KNN算法是一个分类算法,基本数学模型是距离模型。K-最近邻是一种超级简单的监督学习算法。它可以应用于分类和回归问题。虽然它是在 1950 年代引入的,但今天仍在使用。然而如何实现,本文将给出具体描述。 来源:维基百科 …

高速USB转4路RS422串口

基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口。CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动程序,可支持Windows、Linux、Android、macOS等操作系统。因CDC类协议和类驱动的原…

Android 10.0 系统开启和关闭黑白模式主题功能实现

1. 概述 在10.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…

DA3 网站的第10位用户信息读取

目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID …

git:一、GIT介绍+安装+全局配置+基础操作

版本管理系统(SVN和Git): 集中式版本控制系统(SVN) SVN是集中式版本控制系统,版本库是集中放在中央服务器的. 工作流程如下: 1.从中央服务器远程仓库下载代码 2.修改后将代码提交到中央服务器远程仓库…

with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found

吐槽傻逼xcode 根据提示 执行了这个脚本/opt/MonkeyDev/bin/md 往这里面添加你brew install 安装文件的目录即可

华为云云耀云服务器L实例评测|如何保障华为云云耀云服务器L实例的安全和性能

引言 云耀云服务器L实例是华为云提供的高性能计算实例,为用户提供稳定可靠的云计算环境。为了保障实例的安全和性能,用户可以通过设置防火墙和安全组策略来限制网络访问和防止恶意攻击。华为云提供了灵活的管理工具,用户可以通过控制台、API…

关于ElementUI之首页导航与左侧菜单实现

目录 一.Mock 1.1.什么是Mock.js 1.2.特点 1.3.安装与配置 1.3.1. 安装mock.js 1.3.2.引入mock.js 1.4.mockjs使用 1.4.1.定义测试数据文件 1.4.2.mock拦截Ajax请求 1.4.3.界面代码优化 二.总线 2.1.是什么 2.2.前期准备 2.3.配置组件与路由关系 2.3.1. 配置组件 …

客户端负载均衡_负载均衡策略

以前的Ribbon有多种负载均衡策略 RandomRule - 随性而为 解释: 随机 RoundRobinRule - 按部就班 解释: 轮询 RetryRule - 卷土重来 解释: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试。 Weigh…

Golang import

常规 import ("fmt" ) //可以直接调用 fmt.Println("Hello World!!!")省略包名引入 import import ( . "fmt" ) //可以不写包名直接调用 Println("Hello World!!!")别名 import (f "fmt" ) //可以使用自定义名称调用 f.…

北京智和信通亮相2023IT运维大会,共话数智浪潮下自动化运维新生态

2023年9月21日,由IT运维网、《网络安全和信息化》杂志社联合主办的“2023(第十四届)IT运维大会”在北京成功举办。大会以“以数为基 智引未来”为主题,北京智和信通技术有限公司(下文简称:北京智和信通&…

flask+python快速搭建

app.py """APP 入口模块""" from traceback import format_excfrom api_limiter import limiter from flask import Flask, jsonify import loggingfrom controller import api_sql_blueapp Flask(__name__) limiter.init_app(app) app.regist…

golang:context

context作用 goroutine的退出机制 多个goroutine都是平行的被调度的,多个goroutine如何协调工作涉及通信、同步、通知和退出 通信:goroutine之间的通信同步chan通道 同步:不带缓冲的chan提供了一个天然的同步等待机制。通过WaitGroup也可以…

【学习草稿】背包问题

一、01背包问题 图解详细解析 (转载) https://blog.csdn.net/qq_37767455/article/details/99086678 :Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物…

Kubernetes组件和架构简介

目录 一.概念简介 1.含义: 2.主要功能: 3.相关概念: 二.组件和架构介绍 1.master:集群的控制平面,管理集群 2.node:集群的数据平面,为容器提供工作环境 3.kubernetes简单架构图解 一.概…

技战法-信息收集

搜索引擎语法 Google hacking: site: 限制搜索范围为某一网站,例如: site:baidu.com"admin”可以搜索baidu.com 网站上包含关键词“admin”的页面。 inurl: 限制关键字出现在网址的某个部分,例如: inurl:php?id 可以搜索网址中包含 ph…