spring之面向切面编程AOP概述

news2025/1/18 21:11:53

文章目录

  • 前言
  • 一、介绍AOP
  • 二、面向切面编程的七大术语
  • 三、切点表达式


前言

AOP(Aspect Oriented Programming)面向切面编程,是一种编程技术。
AOP是对OOP(面向对象)的补充延伸。
AOP底层使用的就是动态代理实现的。
Spring的AOP使用的动态代理是:JDK动态代理+CGLIB动态代理技术,Spring在这两种动态代理中灵活切换,如果是代理接口,会默认使用JDK动态代理,如果要代理某个类,这个类没有实现接口,就会切换使用CGLIB。当然,也可以强制通过一些配置让Spring只使用CGLIB。


一、介绍AOP

将与业务逻辑无关的(非业务逻辑)代码,单独的提取出来,形成一个横向的切面,独立的组件。核心业务是纵向的,然后把横向的切面以横向交叉的方式应用到业务流程当中的过程叫做面向切面编程。

一般一个系统当中都会有一些系统服务,例如:日志、事务管理、安全等。这些系统服务被称为:交叉服务
如果在每一个业务处理过程当中,都掺杂这些交叉代码进去的话,存在两方面问题:

  • 第一:交叉业务代码在多个业务流程中反复出现,显然这个交叉业务代码没有得到复用。并且修改这些业务代码的话,需要修改多处。
  • 第二:程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还要处理这些交叉业务。
    使用AOP可以很轻松解决以上问题

在这里插入图片描述
将与核心业务无关的代码独立的抽取出来,形成一个独立的组件,然后以横向交叉的方式应用到业务流程当中的过程被称为AOP

AOP 的优点:
第一:代码复用性增强
第二:代码易维护
第三:使开发者关注业务逻辑

二、面向切面编程的七大术语

连接点 Joinpoint:在程序的整个执行流程当中,可以织入切面的位置。方法执行前后,异常抛出之后等位置。连接点描述的是位置
切点 Pointcut:在程序执行流程中,真正织入切面的方法。 切点本质上就是方法
通知 Advice:通知又叫做增强,就是具体要织入的代码。包括:前置通知(目标方法执行之前)、后置通知(目标方法执行之后)、环绕通知(目标方法前后)、异常通知(catch)、最终通知(finally)通知描述的是代码
切面 Aspect:切点+通知就是切面。
织入 Weaving:把通知应用到目标对象上的过程。
代理对象 Proxy:一个目标对象被织入通知后产生的新对象。
目标对象 Target:被织入通知的对象

三、切点表达式

切点表达式用来定义通知往哪些方法上切入

切入点表达式语法格式:

execution([访问控制权限修饰符] 返回值类型 [全限定类名] 方法名(形式参数列表) [异常])

访问控制权限修饰符:
写public就表示只包括公开的方法
没写,就是4个权限都包括
可选项

返回值类型:
必须填
*表示返回值类型任意

全限定类名:
可选项
两个点“…”表示当前包以及子包下的所有类
省略时表示所有的类

方法名:
必填项
表示所有的方法
set
表示所有的set方法

形式参数列表
必填项
()表示没有参数的方法
(…)参数类型和个数随意的方法
()只有一个参数的方法
(
,String)第一个参数类型随意,第二个参数是String的

异常:
可选项
省略时表示任意类型的异常


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

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

相关文章

论文投稿指南——中文核心期刊推荐(地理学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

2017双11交易系统TMF2.0技术揭秘,实现全链路管理

摘要: 本文是《2017双11交易系统TMF2.0技术揭秘》演讲整理,主要讲解了基于TMF2.0框架改造的交易平台,通过业务管理域与运行域分离、业务与业务的隔离架构,大幅度提高了业务在可扩展性、研发效率以及可维护性问题,同时以…

2023年网络爬虫实训(第一天)

任务1:理解http协议。https协议,tcp协议。udp协议。掌握http的通讯过程。掌握客户端是如何获取respnse并展示数据的。 HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包…

基于微信小程序的电影交流平台小程序

文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…

Three.js 粗糙度贴图与金属度贴图

在开始介绍贴图之前,我们先介绍一下粗糙度属性以及金属度属性。 粗糙度属性 .roughness 表示材质的粗糙程度,0 表示平滑的镜面反射,1 表示完全漫反射,而金属度属性 .metalness 表示材质与金属的相似度,非金属材质&…

Java基础学习笔记(十四)—— 集合(2)

集合1 Set 集合1.1 Set 集合概述1.2 Set 集合的使用2 TreeSet 类2.1 TreeSet 类概述2.2 TreeSet 基本使用2.3 TreeSet 排序3 HashSet 类3.1 HashSet 类概述3.2 HashSet 基本使用3.3 哈希值3.4 HashSet 案例4 Map 集合4.1 Map 集合概述4.2 Map 常用方法4.3 Map 的遍历5 HashMap …

mysql:存储过程的创建与使用

一、创建存储过程 使用MySql Workbench创建存储过程,一定要记得使用delimiter指明结束符,否则会报错:Statement is incomplete, expecting: ;’ 错误示例: create procedure area_pro1(in mylevel tinyint) beginselect * from…

回看2022,展望2023

目录一、回看2022求职心路身份过度二、展望20232023年,祝大家天天开心,身体健康,万事如意,一起加油!一、回看2022 求职心路 2022年过去了,2023年到来了。在2022年我印象比较深刻的是8-11月份的日子&#…

【正点原子FPGA连载】第十六章Petalinux设计流程实战摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十六章Petalin…

大数据必学Java基础(一百二十一):Maven项目结构介绍

文章目录 Maven项目结构介绍 一、标准目录结构 二、结构图 Maven项目结构介绍 一、标准目录结构

商场导视图用什么软件做,专业、便捷的室内电子地图绘制平台

在一些大型商场,顾客很多时候找不到店铺和需要的商品、不了解商家的优惠促销信息、大型活动日排队和消费等等。在这个全民习惯于手机导航的时代,假如商场的活动信息也能够全部显示在手机上,并且能实时的进行导航,那该有多方便&…

剑指offer----C语言版----第十八天----面试题24:反转链表

目录 1. 反转链表 1.1 题目描述 1.2 思路一:反转指针 1.3 思路二:头插到新链表 1.4 往期回顾 1. 反转链表 原题链接: 剑指 Offer 24. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/fan-zhuan-lian-biao-…

4700. 何以包邮?(简单的dp 01背包思想)

题目如下: 输入样例1: 4 100 20 90 60 60输出样例1: 110样例1解释 购买前两本书 (2090) 即可包邮且花费最小。 输入样例2: 3 30 15 40 30输出样例2: 30样例2解释 仅购买第三本书恰好可以满足包邮条件。 输入样例…

分享128个ASP源码,总有一款适合您

分享128个ASP源码,总有一款适合您 ASP源码 分享128个ASP源码,总有一款适合您 链接:https://pan.baidu.com/s/1FXTm501s200ASY8XYTIk7w?pwd474b 提取码:474b 下面是文件的名字,我放了一些图片,文章里不…

安凯微在科创板IPO过会:计划募资10亿元,小米等为其股东

1月13日,上海证券交易所披露的信息显示,广州安凯微电子股份有限公司(下称“安凯微”)首发符合发行条件、上市条件和信息披露要求,即IPO过会。目前,安凯微的上市申请状态已经变更为“上市委会议通过”。 本次…

线程学习基础(1):单线程爬虫和多线程爬虫的效率比照

线程学习基础:单线程爬虫和多线程爬虫的效率比照1. 并发线程的需求2. 线程提速方法3. 如何选择并发编程的三种方式3.1 什么是CPU密集型计算、IO密集型计算?3.1.1 CPU密集型(CPU-bound)3.1.2 IO密集型(IO-bound)3.2 多线程Thread、…

三维空间中散点平面拟合方法

1、三点求平面方程、平面法向量和点到平面的距离 已知三点p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3), 要求确定的平面方程,关键在于求出平面的一个法向量 为此做向量p1p2(x2-x1,y2-y1,z2-z1), p1p3(x3-x1,…

Linux-8 用户管理

Linux-8 用户管理 什么是用户? Linux/Windows通过用户来管理和维护系统; Windows下的管理员用户:AdministratorLinux下的管理员用户:root Windows/Linux都是多用户系统 Windows同一时间只能使用1个用户Linux可以多用户同时登陆&…

STL - Vector容器

基本概念 功能: vector数据结构和数组十分类似,也成为单端数组 vector和普通数组的区别: 不同之处在于数组是静态空间,而vector可以动态扩展 动态扩展: 并不是在原空间后续再接空间&#x…

【pandas】用户手册:10分钟熟悉pandas(下)

数据分组 Splitting : 利用某些条件将数据进行分组Applying : 函数应用于每个单独的分组Combining : 合并最终的结果 df pd.DataFrame({"A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo&q…