面向切面编程-AOP

AOP【面向切面编程】 文章目录AOP介绍AOP术语AOP的实现方式 AOP介绍 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming),面向对象编程的补充和完善。   面向切面编程是面向对象中的一种方式而已。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程。常见的使用场景: 日志 事物 数据库操作 面向切面编程,... 阅读详情

Aop

概述:Aspect Oriented Programming(面向切面编程、面向方面编程),即面向特定的方法编程,对原有的方法进行附加、增强

动态代理是面向切面编程的主流实现

实现步骤

  1. pom文件中导入AOP依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-start-aop</artifactId>
</dependency>

2.创建一个面向Aop编程的一个类
案例部分功能运行较慢,定位耗时比较长的业务方法,此时需要统计每一个业务方法的执行耗时
在这里插入图片描述
优点:
1.代码无入侵
2.减少重复代码
3.提高开发效率
4.维护方便

核心概念
1.连接点:JoinPoint,可以被Aop控制的方法
2.通知:Advice,指哪些重复的逻辑,也就是共性功能
3.切入点:PointCut,匹配连接点的条件
4.切面:Aspect,通知+切入点
5.目标对象,Target,通知所应用的对象
在这里插入图片描述

Aop进阶

1.通知类型

@Around:环绕通知,此标注的通知方法在目标方法前后都被执行
1.环绕通知需要自己调用ProceedingJoinPoint.proceed()。
2.环绕通知的返回类型为Object

@Before:前置通知,在目标方法前执行
@After:后置通知,在目标方法后执行,无论是否异常都执行
@AfterReturning:返回后通知,在目标方法后执行,有异常不会执行
@AfterThrowing:异常后通知,发生异常后执行

切入点表达式的抽取

//抽取切入点,@pointcut
@Pointcut("execution(* com.learn.service.serviceImpl.*.(**))")
public void pt(){};
//引用
@Before("pt()")
private void before(){}
//privite表示只有当前类可以抽取,public表示所有类都可以抽取

2.多个切面类通知执行的顺序

1.可以在切面类添加@Order(数字)注解来控制顺序
2.对于目标方法执行前的通知,数字小的先执行
3.对于目标方法执行后的通知,数字小的后执行

3.切入点表达式

1.execution(…):根据方法的签名来匹配
execution(访问修饰符 返回值 包名.类名.方法名(方法参数) throws 异常 )
访问修饰符,包名、类名,异常都可以省略,但是包名和类名省略的话,可能出错

在使用的过程中,可以使用通配符来描述切入点

1." * ",单个独立的任意符号,返回值、包名、类名、方法名、任意类型的一个参数
2. " … "多个连续的任意符号,可以通配任意层级的包、类型、任意个数的参数。

如果是比较复杂的切入点表达式,或者想要调用多个方法,切入点的表达式可以用 || 、 &&、 !
在这里插入图片描述
注意事项

  1. 业务层的命名方法需要统一规范,如查询方法名都以find开头
  2. 描述切点的方法通常基于接口描述,而不是直接描述实现类
  3. 满足业务需求的前提下,尽量缩小切入点的范围

2.@annotation(…):根据注解匹配
用于匹配标识有特定注解的方法
1.自定义切面注解,右键新建一个Annotation文件
2.添加注解@Retention,指定什么时候生效
3.添加@Target注解,指定生效的地方
在这里插入图片描述
4.在业务层对应的方法添加@注解的类名,如@MyLog
5.在切面类的切入点添加自定义的注解路径
在这里插入图片描述

4.连接点

1.对于@Around的通知,获取连接点信息,只能使用ProceedingJoinPoint
2.对于其他四种通知,获取连接点的信息只能用JoinPoint,他是ProceedingJoinPoint的父类

在这里插入图片描述

【Spring】 AOP面向切面编程 横切关注点从每个方法中抽取出来的同一类非核心业务。在同一个项目中,我们可以使用多个横切关注点对相关方法进行多个不同方面的增强。有十个附加功能,就有十个横切关注点。AOP核心关注点和横切关注点。业务处理的主要流程是核心关注点,非核心代码是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务、异常等。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。(分离核心业务代码与非核心代码通知(增强)每一个横切关注点。 阅读详情

相关推荐

AOP(面向切面编程)

AOP(Aspect-Oriented Programming)是面向切面编程的范式,它通过横切关注点(cross-cutting concerns)的模块化,解决了OOP(面向对象编程)在处理横跨多个类和方法的功能时出现的代码重复和耦合问题。核心概念切面(Aspect):横切关注点的模块化(如日志、事务)连接点(Join point):程序执行的特定点(如方法调用)通知(Advice):在连接点执行的动作切点(Pointcut):匹配连接点的谓词(定义何处执行)引入(Introduction)

代码客 1817

AOP面向切面编程

本文介绍了Spring AOP的基本概念和应用。AOP(面向切面编程)是一种横向切割关注点的编程范式,用于解耦日志、事务等横切关注点。文章对比了Spring AOP和AspectJ框架的特点,Spring AOP基于动态代理实现,AspectJ则更强大但复杂。详细讲解了AOP核心术语(切面、切入点、通知等)和五种通知类型的使用方法,包括前置、后置、环绕等通知。通过一个简单案例演示了AOP的实际应用,展示了如何在不修改原有代码的情况下增强方法功能。

xg_960的博客 1602

AOP(面向切面编程)

  我们在编写代码时,只想关注逻辑代码的实现。但是我们的程序是要放到服务器上去跑的,我们在代码中如果只有业务逻辑代码。虽然代码简洁,但是万一程序在服务器跑的时候数据出现问题时,没办法快速定位到问题所在。但是将日志等非逻辑代码和我们的逻辑代码放在一起,会使得代码冗余,代码的可读性难度加大。   基于上面的问题,Spring为我们提供了一种解决方案,将业务功能逻辑代码和非功能代码分开来写,然后使用动态代理,将非功能性代码嵌入到功能代码中,这就是所谓的AOP(面向切面编程)。  1、我们要使用Aop对我们的bea

StudyJava01的博客 1608

java:AOP面向切面编程

AOP是什么:一种将横切关注点(日志、事务等)与核心业务逻辑分离的技术。如何实现:Spring AOP通过动态代理在运行时将切面“织入”到目标方法中。核心注解@Aspect@Pointcut@Around@Before@After等。为何需要:实现解耦、提高代码的可复用性和可维护性,让开发者能更专注于核心业务逻辑。通过AOP,我们可以以一种非常优雅和非侵入式的方式,为应用程序添加强大的功能。

talenteddriver的博客 1771

强化学习环境Gym库的介绍

Gym是一个用于进行强化学习实验的开源库,它提供了一个仿真环境,内置了多种仿真游戏,例如出租车游戏、悬崖游戏等,不同的游戏所用的网格、规则、奖励(reward)都不一样,适合为强化学习做测试。(1) 多种环境:Gym库内置了上百种实验环境,包括算法环境、简单文本环境、经典控制环境、Atari游戏环境、MuJoCo环境和机械控制环境等。(2) Gym提供多种环境供我们使用,这里以一个简单的CartPole-v0为例,首先导入gym库,然后创建一个CartPole-v0环境,通过调用gym.make方法实现。

ahah12345678的博客 2148

在安装之后使用labelme出现qtpy.PythonQtError:No Qt bindings could be found错误

我在base环境(python3.7)可成功安装和使用labelme,而在同py37版本和py36的虚拟环境中可安装labelme包,但在使用的时候出现报错,如下: 我尝试着去解决第一个错误提示,错误提示为:moduleNotFoundError:No module named ‘PySide’,结果掉入了一个无止无尽的坑,看到网上有朋友说这个只能在py27-py35才能安装,还有说需要VC+ 140等,他们说的这个解决方案只针对于这个缺包的描述,而我们仅仅只需要一个labelme,因此我直接对后面的错误

qq_33538651的博客 9816

Spring AOP面向切面编程

AOP一种区别于OOP的编程思维,用来完善和解决OOP的非核心代码冗余和不方便统一维护问题!代理技术(动态代理|静态代理)是实现AOP思维编程的具体技术,但是自己使用动态代理实现代码比较繁琐!Spring AOP框架,基于AOP编程思维,封装动态代理技术,简化动态代理技术实现的框架!SpringAOP内部帮助我们实现动态代理,我们只需写少量的配置,指定生效范围即可,即可完成面向切面思维编程的实现!

qq_73607317的博客 1130

用Logisim搞定华科计组实验:单总线CPU设计从微程序到硬布线的保姆级通关攻略

本文详细介绍了如何使用Logisim完成华中科技大学计算机组成原理实验中的单总线CPU设计,涵盖从微程序控制器到硬布线控制器的完整实现过程。通过MIPS指令译码器设计、微程序控制原理、状态机实现等关键步骤的保姆级教程,帮助学生掌握CPU设计的核心技能,并提供Educoder平台提交与调试的实用技巧。

weixin_30897233的博客 476

spring AOP面向切面编程

spring AOP面向切面编程 AOP:Aspect Oriented Programing 面向切面编程 面向切面编程指的是:程序是运行期间,动态地将某段代码插入到原来方法代码的某些位置中。这就叫面向切面编程。 AOP采用横向抽取机制,取代了传统纵向继承体系抽取重复性代码(性能监视、事务管理、安全检查、缓存) 面向对象纵向继承机制 面向切面横向抽取机制 AOP面向切面编程的底层原理就是代理 动态代理的方式有两种: 基于接口实现动态代理: JDK动态代理 基于继承实现动态代理:CGLIB代理 优先使用接

Ron_的博客 7806

使用 C# 开发海康设备实时视频流的监控与报警系统

本文介绍了如何使用C#结合海康威视SDK(HCNetSDK)开发安防监控系统,涵盖设备登录、视频流获取、报警处理和云台控制等核心功能。内容包括开发环境配置、系统架构设计、关键代码实现(如设备登录、实时视频播放、报警设置)以及用户界面设计。通过Windows Forms/WPF,开发者可构建完整的监控应用,实现设备管理、视频监控、报警响应等功能。系统采用模块化设计,便于扩展和维护,适用于各类安防场景。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1357

别再只用固定线了!聊聊Android车机‘快速倒车’与‘正常倒车’的UI与数据流核心差异(附动态轨迹线实现原理)

本文深度解析Android车机中快速倒车与正常倒车的核心差异,探讨从内核级视频流水线到动态轨迹线的技术实现。快速倒车通过内核直接操作FrameBuffer实现2秒内响应,而正常倒车则支持多传感器数据融合与动态UI元素。文章还分享了动态轨迹线的算法实现与性能优化技巧,帮助开发者打造极致的倒车体验。

weixin_42550597的博客 255

[Spring] AOP面向切面编程

AOP执行流程,切点表达式,通知类型,切点数据获取

沫洺的博客 1528

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

Spring 面向切面编程AOP 详细讲解

交叉业务。这些交叉业务几乎是通用的,不管你是做银行账户转账,还是删除用户数据。日志,事务处理,安全,这些都是需要做的。如果在每一个业务处理过程当中,都参杂这些交叉业务第一:交叉业务代码在多个业务流程中反复出现,显然这个交叉业务代码并没有得到充分的复用,并且修改这些交叉业务代码的话,需要修改多处。第二:程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还需要处理这些交叉业务。使用 AOP 可以很轻松的解决以上问题。如下图:可以更好的理解 AOP思想。简单的说AOP:就是将与核心业务。

weixin_61635597的博客 1009

03、ZigBee 开发教程之进阶篇—CC2530无线传输质量检测

文章目录1、Packet Error Rate Tester(包错误率测试)理论分析1.1、工作流程1.2、流程图1.3、丢包、PER、RSSI计算方法2、实验详解2.1、实验目的2.2、实验设备2.3、实验现象2.4、源码分析2.5、实验步骤及现象 1、Packet Error Rate Tester(包错误率测试)理论分析 1.1、工作流程 Packet Error Rate Tester(包错误率测试) 1、启动 板载外设、射频IO、系统时钟、中断等初始化(halBoardInit();); Bas

嵌入式羊圈 1539

大数据Alluxio面试题及参考答案

Alluxio 在大数据生态里的定位是作为数据编排层,能在不同计算框架和存储系统之间起到桥梁的作用。它的核心功能在于加速数据访问,让大数据应用能够更高效地使用数据。Alluxio 把数据存储和数据处理分离开来,使计算框架可以在不考虑底层存储细节的情况下访问数据,这样就提高了系统的灵活性和可扩展性。Alluxio 和 HDFS 既存在关联又有区别。从关联方面来看,HDFS 是一种广泛使用的分布式文件系统,很多大数据应用都将其作为主要的数据存储系统。Alluxio 可以和 HDFS 集成,把 HDFS 当作底层

大模型大数据攻城狮的专栏 863
上一篇: 事务管理-@TransActional
下一篇: springboot-配置优先级
Hey_米氏胡
博客等级 码龄4年 15粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值