AOP总结

AOP是什么

AOP是面向切面编程,其目的是将横切关注点从核心业务代码中分离出来,通过动态代理等方式,实现代码的增强和解耦,使得其具有更好的可维护性和可扩展性。

其中横切关注点是多个类或对象的公共行为,如事务管理、日志记录、接口限流、权限控制等。

AOP解决了什么

AOP解决了在面向对象编程中,不能很好地处理一些分散的类或对象的公共行为的问题,因为在不使用AOP的情况下,每个类或对象中都需要编写这些行为执行逻辑的代码,导致代码冗余、复杂难以维护,因此引入了AOP机制,将这些公共行为的逻辑代码从核心业务代码中分离出来。

AOP常见术语

1、横切关注点:多个对象或方法共同行为。

2、切面:将横切关注点封装成类,每一个类就是一个切面。

3、连接点:方法调用或执行时的某个时刻,如方法调用、异常抛出。

4、通知:指在某个连接点处执行的具体操作,通知包含前置(@Before)、后置(@After)、异常(@AfterThrowing)、返回(@AfterReturning)、环绕(@Around)通知这五种,其中前四种在目标方法执行前后执行,环绕通知可在方法执行的过程中执行。

5、切点:是一个表达式,用于指定哪些连接点需要切面增强。

6、织入:将切面和目标对象连接起来的过程,即在切点配置的连接点处应用通知的过程,包含编译期织入和运行期织入两种方式。

AOP和AspectJ对比

AOP是通过动态代理实现的,属于运行时增强,且需要依赖于Spring容器,使用javac编译器实现。对于被代理的类,若实现了接口,则使用JDK实现动态代理,反之使用Cglib实现。使用该方法时,由于容器启动时需要生成代理对象且在方法调用上会增加栈的深度,切面在代理中执行,因此AOP的效率相比于AspectJ来说较低。同时对于织入,仅支持方法级的织入。

AspectJ属于编译时增强,可单独使用或整合到其他框架中,需要使用的编译器为ajc。同时,其属于静态织入,通过修改代码完成,在实际运行前就已经完成了对切面的织入,生成的类没有额外的开销。支持编译时、编译后、加载时织入,同时可编织字段、方法、构造函数、静态初始值等。

多个切面优先级确定

由于切面是一个类,要使一个类为切面,首先需要对该类加上注解@Aspect,要控制多个切面执行的顺序,可使用两种方法:

1、使用@Order注解,并令注解中的值为一个数值,数值越小优先级越高;

2、实现Ordered接口,并重写order方法,该方法返回一个整数,代表优先级的大小,数值越小优先级越高。

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

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

相关文章

2024宝藏工具EasyRecovery数据恢复软件免费版本下载

在这个数字化的时代,数据已经成为我们生活中的重中之重。无论是工作中的重要文件,还是手机中珍贵的照片,我们都依赖着这些数据。然而,数据丢失的情况时有发生,可能是误删,可能是设备故障,更可能…

java-方法

在 Java 编程语言中,方法是一段用于执行特定任务的代码。方法是面向对象编程(OOP)的基础之一,因为它允许我们在对象上执行操作。在 Java 中,方法是类的组成部分,这意味着它们与类紧密相关。本解释将涵盖 Ja…

vue3和vite实现vue-router4版本路由的配置以及自动生成路由配置

这个是普通的手动路由配置:https://blog.csdn.net/weixin_68658847/article/details/130071101 自动路由配置 创建项目 npm create vitelatest my-vue-app -- --template vue // 或者 yarn create vite my-vue-app --template vue// 安装路由 yarn add vue-route…

Ansible02-Ansible Modules模块详解

目录 写在前面4. Ansible Modules 模块4.1 Ansible常用模块4.1.1 Command模块4.1.2 shell模块4.1.3 scrpit模块4.1.4 file模块4.1.5 copy模块4.1.6 lineinfile模块4.1.7 systemd模块4.1.8 yum模块4.1.9 get_url模块4.1.10 yum_repository模块4.1.11 user模块4.1.12 group模块4.…

IPv4 报头 Protocol 字段和 IPv6 报头 Next header 字段中的 IP 协议号列表

IPv4 基本报头(20 ~ 60 Byte) IPv6 基本报头(40 Byte) IPv4 Header vs IPv6 Header 黄色 为 IPv6 与 IPv4 相同 红色 为 IPv6 删除的 蓝色 为名称不同功能相同 中青色 为新增的 Type of service Traffic Class (用于…

js知识点汇总之let const 和 var的区别

let const 和 var的区别 作用域 ES5 中的作用域有:全局作用域、函数作用域,ES6 中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的 { } 也属于块作用域。 var关键字 没有块级作用域的概念 // global scope {var a 10;…

AGI系列(2):掌握AI大模型提示词优化术,从容应对各种提问场景

在上一篇大模型提示词的文章中,笔者介绍一种通用提示词优化的方法,这种方法基本上可以覆盖大部分人的一般场景需求。 没看到上文的读者,可以通过如下链接去看下: 👉👉👉 AGI系列(1&a…

全网首发UNIAPP功能多的iapp后台源码

全网首发UNIAPP功能多的iapp后台源码,众所周知UN Dev Assist 后台是一款既不免费又不好用的后台今天直接分享。 搭建教程在里面了,自己查看。 源码下载:https://download.csdn.net/download/m0_66047725/89291994 更多资源下载:…

【Python】处理不平衡数据集的高级方法:ADASYN详解

原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…

汇编原理(二)

寄存器:所有寄存器都是16位(0-15),可以存放两个字节 AX,BX,CX,DX存放一般性数据,称为通用寄存器 AX的逻辑结构。最大存放的数据为2的16次方减1。可分为AH和AL,兼容8位寄存器。 字:1word 2Byte…

JVM学习-Class文件结构②

访问标识(access_flag) 在常量池后,紧跟着访问标记,标记使用两个字节表示,用于识别一些类或接口层次的访问信息,包括这个Class是类还是接口,是否定义为public类型,是否定义为abstract类型,如果…

健身房会员管理系统服务预约小程序的作用是什么

拥有完美身材/减肥/锻炼等前往健身房是个不错的选择,商家生意开展需要吸引同城客户并转化,客户也有自己的判断需要找到更全面的场地;完善客户消费流程利于品牌发展和不断获客转化。 运用【雨科】平台搭建健身房管理系统小程序,多…

MySQL事务篇1:事物的四大特性(ACID)、三类数据读取问题与隔离级别

一、什么是事务? MySQL的事务(Transaction)是一组由数据库管理系统(DBMS)执行的一个或多个SQL语句的集合,这些SQL语句作为一个单独的工作单元执行。事务的主要目的是确保数据库的一致性和完整性&#xff0c…

蓝桥杯2023(十四届)省赛——飞机降落(双马尾DFS)

飞机降落(DFS) 蓝桥杯2023年第十四届省赛真题-飞机降落 - C语言网 (dotcpp.com) 一开始我是真的没想到用DFS做,我还在想用什么策略排序呢。需要再刷!!! 双马尾的意思其实是刷了两次... 一刷&#xff1a…

leecode 637 二叉树的层平均值

leetcode 二叉树相关-层序遍历专题 二叉树的层序遍历一般来说,我们是利用队列来实现的,先把根节点入队,然后在出队后将其对应的子节点入队,然后往复此种操作。相比于二叉树的遍历递归,层序遍历比较简单,有…

CHI协议_1

作者:someone链接:https://www.zhihu.com/question/304259901/answer/3455648666来源。 1. AMBA CHI简介 一致性总线接口(CHI)是AXI一致性扩展(ACE)协议的演进。它是Arm的AMBA总线的一部分。AMBA是一种免…

美团Java社招面试题真题,最新面试题

如何处理Java中的内存泄露? 1、识别泄露: 使用内存分析工具(如Eclipse Memory Analyzer Tool、VisualVM)来识别内存泄露的源头。 2、代码审查: 定期进行代码审查,关注静态集合类属性和监听器注册等常见内…

VueJS ReactJS实现AI问答小助手(2)——流式TTS文字转实时语音播放

TTS(Text-to-speech)文字转语音使用的是阿里云的服务,文档地址: https://help.aliyun.com/zh/isi/developer-reference/streaming-text-tts-wss 文档只给出了一些配置项的说明,以及java端的代码示例,但没有web端的。所以这篇笔记可以给web开发者参考。 首先,AI答复的消息…

.NET File Upload

VS2022 .NET8 &#x1f4be;基础上传示例 view {ViewData["Title"] "File Upload"; }<h1>ViewData["Title"]</h1><form method"post" enctype"multipart/form-data" action"/Home/UploadFile"…

Android 系统日志(Log) JNI实现流程源码分析

1、JNI概述 Java Native Interface (JNI) 是一种编程框架&#xff0c;使得Java代码能够与用其他编程语言&#xff08;如C和C&#xff09;编写的本地代码进行交互。JNI允许Java代码调用本地代码的函数&#xff0c;也允许本地代码调用Java代码的函数。下面是对JNI机制的详细概述…