AOP编程

news2024/9/20 9:18:21

什么是面向切面编程AOP?

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP作用

对程序进行增强:不修改源码的情况下,AOP可以进行权限的校验,日志记录,性能监控,事务控制

Spring底层的AOP原理:

动态代理(静态代理)

JDK动态代理: 面向接口的,只能对实现了接口的类产生代理

Cglib动态代理(类似于JavaSsit第三方代理技术):对没有实现接口的类产生代理对象(生成子类对象)

实现了接口,Spring就用JDK动态代理,没有实现接口的,用Cglib动态代理,Spring底层可以自动切换

 

Spring的AOP的简介

▪AOP思想最早是有AOP联盟组织提出的,Spring使用这种思想最好的框架.

▪Spring的AOP有自己的实现方法(非常繁琐)

▪使用第三方的AspectJ是一个AOP的扩建,Spring引入AspectJ作为自身AOP的开发.

▪Spring的AOP开发方式

▪Spring传统的方式(弃用)

▪Spring基于AspentJ的AOP开发(使用广泛)

Spring的AOP开发的相关术语

1.通知(Advice

  就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好把,然后在想用的地方用一下。

    2.连接点(JoinPoint

     spring允许你使用通知的地方,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.和方法有关的前后(抛出异常),都是连接点。

    3.切入点(Pointcut

  上面说的连接点的基础上,来定义切入点,你的一个类里,有5个方法,那就有5个连接点了,但是你并不想在所有方法附近都使用通知(使用叫织入),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。

    4.切面(Aspect

  切面是通知和切入点的结合。通知说明了干什么和什么时候干(什么时候通过方法名中的before,afteraround等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。

    5.引入(introduction

  允许我们向现有的类添加新方法属性。就是把切面(也就是新方法属性:通知定义的)用到目标类中

    6.目标(target

  引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。

    7.代理(proxy)

  怎么实现整套aop机制的. 就是通过代理.织入增强功能后产生的代理对象

    8.织入(weaving)

把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时。

通知的类型

通知的意思就是个顺序: 在目标方法之前或后执行

前置通知before:在目标方法执行之前的操作

可以获取切入点的信息

后置通知after-returning在目标方法执行之后的操作

带返回值的后置通知after-returning在目标方法执行之后的操作,并获取目标方法的返回值

环绕通知around:在目标方法执行之前和之后进行操作

扩展带参数: 环绕通知around:在目标方法执行之前和之后进行操作


异常抛出通知after-throwing:在目标方法抛出异常时的操作(比如出现异常后进行回滚)。 
最终通知after:无论是否有异常都会执行的,相当于try-catch-finally中的finally 

 

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

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

相关文章

【个人硬件开源分享】基于ESP32的能量机关主控受控模块,伏虎单手摇杆重力感应加摇杆加LCD屏幕分为左手和右手,基于PD5048A的I2C总线扩展级联器

提示:文章看完后,记得点赞! 文章目录前言基于ESP32的能量机关主控受控模块伏虎单手摇杆I2C总线级联器MPU6050陀螺仪WS2812灯珠总结前言 这些是我业余时间做的一些电子小作品,包括基于ESP32的能量机关主控受控模块,伏虎…

在这个技术浮躁的时代也要注重架构的本质,多位大佬联袂推荐小团队构建大网站,让你少走弯路,甚至实现速成,成为优秀架构师!

作为一个技术人,架构师是每个人追寻的目标,也是个人价值和成就的一个重要标志。 那架构师是怎样炼成的呢?或者说,怎样才算是一个优秀的架构师呢? 我们需要几年甚至十几年的一线技术工作经验,我们需要正好遇…

isdigit isdecimal isnumeric 区别

一、代码测试 num "1" #unicode num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum "1" # 全角 num.isdigit() # True num.isdecimal() # True num.isnumeric() # Truenum b"1" # byte num.isdigit() # True n…

还在手动电源模块测试吗?ATECLOUD智能云测试解放双手

江苏某生产电源的企业联系到纳米软件Namisoft,了解到他们目前依然使用的是全人工模式进行电源模块参数的测试,经常会因为手动记录数据而导致的一些数据出错,测试的效率也是非常低。通过网络了解到Namisoft的ATECLOUD智能云测试平台&#xff0…

Eruke是什么?怎么搭建?

Eruke是什么?怎么搭建?认识Eureka构成单机构建项目搭建注册中心生产者服务发现自我保护什么是自我保护?为什么会有自我保护?关闭结果演示停更认识Eureka 它是一个基于REST的服务,是实现服务发现与注册的组件。 构成 Eureka采用…

【愚公系列】2022年11月 uniapp专题-运行uniapp的多种方式

文章目录前言一、运行到web平台二、运行到安卓模拟器三、运行到微信开发者工具前言 uniapp本身就是一次开发多端部署,uniapp可以发布成各种应用包括以下几种 web版本 一、运行到web平台 点击工具栏的运行 -> 运行到浏览器 -> 选择浏览器,即可体…

BIOMOD2模型、MaxEnt模型物种分布模拟,生物多样性生境模拟,论文写作

目录 ①基于R语言BIOMOD2模型的物种分布模拟实践技术应用 ②基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作 ③基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化评估 ①基于R语言BIOMOD2模型的物种分布模拟实…

分享Markdown编写文档的技巧

Markdown 是一种轻量级标记语言,使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。Markdown有许多好用简单的用法,下面分享Markdown用来编写文档的技巧。 注:下面通过添加\反斜杠来…

Get To The Point: Summarization with Pointer-Generator Networks

论文题目:《Get To The Point: Summarization with Pointer-Generator Networks》 主要内容:seq2seq,文本摘要 《切中要害:指针生成器网络概述》 摘要 神经序列到序列模型为抽象文本摘要提供了一种可行的新方法(这意…

TCP链接异常: SYN_RECV

1. 异常数据包分析: 从数据包分析来看应该是网关这边出问题了,应该是网关的服务程序在1217上出问题了, (注意左右量变的数据包的一个syn的Seq都是1358143899) 从重发2开始网关这边就一直认为它没有收到client回复给它…

Okhttp连接泄漏警告问题分析

背景 某天在查询生产日志时,发现大量的Okhttp连接泄漏警告日志,但生产上没有收到任何异常反馈。出于好奇心,本地最小化复现问题,并最终解决问题。 分析问题 okhttp官网的demo示例 OkHttpClient client new OkHttpClient();Stri…

【K8S】学习笔记(二)

K8S学习笔记三、Kubernetes 核心概念3.1、kubernetes 集群命令行工具 kubectl3.1.1、kubectl 概述3.1.2、kubectl 命令格式3.1.3、kubectl 基础命令3.1.4、kubectl 部署命令3.1.5、kubectl 集群管理命令3.1.6、kubectl 故障和调试命令3.1.7、kubectl 其它命令3.2、Kubernetes 集…

分组后将成员拼成字符串

【问题】 I have a text file like this: key1 value1 A key1 value2 B key1 value3 A key2 value1 A key2 value2 BI am trying to open it as a dictionary and print the list of keys and values separated by commas so it looks like this in the end: key1 value1,va…

PTA题目 谁先倒

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮&…

智云通CRM:越是害怕被客户拒绝,你就越会被拒绝?

你害怕被客户拒绝码?先别急着说“害怕”,先来看看你为什么会被拒绝?因为你认为自己会失败! 很多情况霞,我们会被客户拒绝,原因在哪里?原因有很多,最常见的是因为业务员自身的心理障…

SSM整合(四)

SSM整合之redis设置值和获取值三种方式 准备工作(导入一些必要的依赖) <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.4.1</version> </dependency> <…

ES6 入门教程 19 Generator 函数的语法 19.1 简介

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程19 Generator 函数的语法19.1 简介19.1.1 基本概念19.1.2 yield 表达式19.1.3 与 Iterator 接口的关系19 Generator 函数的语…

Espressif-IDE ESP32 LED Flash 闪烁工程的创建

前言 Espressif-IDE 类似于 eclipse 开发环境&#xff0c;更新 ESP32的开发环境后&#xff0c;发现可以直接使用 Espressif-IDE 进行ESP32 的工程代码开发、程序下载&#xff0c;非常的方便 本篇开始把 ESP32的开发板的LED 点亮&#xff0c;熟悉下 Espressif-IDE 的开发流程 …

MySQL表的高级增删改查

文章目录一、聚合查询二、分组查询三、联合查询内连接外连接自连接四、合并查询五、子查询一、聚合查询 聚合查询是针对行与行之间的计算&#xff0c;常见的聚合函数有: 函数作用COUNT(expr)查询数据的数量SUM(expr)查询数据的总和AVG(expr)查询数据的平均值MAX(expr)查询数据…

ES6 入门教程 18 Iterator 和 for...of 循环 18.1 Iterator(遍历器)的概念

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程18 Iterator 和 for...of 循环18.1 Iterator&#xff08;遍历器&#xff09;的概念18 Iterator 和 for…of 循环 18.1 Iter…