AOP是什么?如何使用AOP?

2023-05-16

  1. AOP基本概念是什么?
  1. 什么是AOP?

AOP就是面向切面编程,或者叫面向方面编程,或者开玩笑的说叫面向方便面编程

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

用我的话讲,比如一个方法,他只能计算加法,而不能计算乘法,但是又不想改源码!这时候可以在外面创建一个类,在这个类中通过AOP的技术给这个方法进行添加功能的操作,这就是AOP。

  1. AOP的作用(特点)是什么?

AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

  1. AOP的底层原理是什么?

AOP底层使用了动态代理

有两种情况

(1、)有接口的情况:                                             

使用了JDK的动态代理

这里有个错误啊,代理类不用继承接口,不用不用继承,懒得改了,写几个字把。

(2、)没有接口的情况:

使用了CGLTB动态代理

  1. AOP动态代理的实现!
  1. 为什么要用动态代理?

在不改变原来的代码上进行 修改代码,有点层次感

  1. 如何使用动态代理?

(这里是有接口的情况下)

使用JDK的动态代理,使用Proxy类里面的方法创建代理对象

  1.  每个方法方法参数的作用?

调用newProxyInstance(1:ClassLoder,2:类<?>[] interfances,3:InvocationHand)

1:类的加载器

2:增强方法所在类,,这个类实现的接口,支持多个接口,所以已数组的形式展出

3:实现这个接口InvocationHand,创建代理的对象,写增强的方法。

  1. 每个方法的作用?

Proxy.newProxyInstance:将方法调用到处理程序,具有指定的代理类,调用处理程序的代理实例,该代理类,由指定的类加载器定义

并实现指定的接口

method.invoke:调用method类代表的方法,其中obj是对象名,args是传入method方法的参数

  1. 步骤

这里已继承接口的栗子举例

这里先创建一个接口

  

然后创建一个类继承这个接口

接下来所有的话都在这张图中:

                     结果就是:

                               以上就是AOP的基础操作。

  1. AOP的基础操作术语有哪些?
  1. 连接点:

连接点是在应用执行过程中能够插入切面(Aspect)的一个点。这些点可以是调用方法时、甚至修改一个字段时

就是可以被增强的方法,就称为连接点

  1. 切入点:

实际被增强的方法,就是切入点,比如说有俩方法,一个方法被增强了一个没被增强,则被增强的方法叫做切入点,没被增强的方法就不能叫做切入点

切入点表达式:

execution (public * com.ljb.service.impl..*.*(..))

execution(权限修饰符,返回值类型,类全路径,方法名称,参数列表)

1.execution:指示符,execution是最常用的指示符,用于匹配方法执行的连接点。

2.public:访问修饰符,该参数可选。

3.第一个*号:返回值类型,*号表示所有的类型,即通配符。

4.包名:需要拦截的包名,后面的两个点表示当前包和当前包的所有子包,即例子中的com. ljb.service.impl包和该包的子孙包下所有类。

5.第二个*号:类名,*号表示所有的类。

*(..):方法名,*号表示所有方法,括号里面表示方法的参数,两个点表示任何参数,可有可无。

  1. 通知(增强)

真正被增强的逻辑部分称为通知(增强)

通知有五种类型:

1、前通知:方法执行之前,method:增强执行的方法

2、后通知:方法执行之后,又称最终通知,无论如何都执行

3、返回后通知:成功返回后,有异常时不执行

4、异常通知:发生异常后,只有异常抛出时才执行,不能try…catch异常

5、环绕通知:在方法的执行前后进行一些增强,在方法的执行前后进行一些增强 =前通知+返回后通知

  1. 切面

切面是一个动作,也叫一个过程:

把通知应当用到切入点的过程

  1. AOP操作的准备工作有哪些?

1、一般基于AspectJ实现AOP操作,他不是Spring组成部分,是独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP的操作。

这有两种方式

  1. 注解方式
  2. Xml方式

这里我就不写xml的方式了

!引入依赖

链接:https://pan.baidu.com/s/14Ige68Y8xxhoe1DDgMKRnQ

提取码:1111

推荐全部导入。

先创建一个类

               然后写配置文件:这其中需要引入context与aop这两个名称空间,不会引入名称空间的小伙伴要去学咯。

然后再创建一个类对原有的类进行增加功能:这里的在前面都讲过了,那个权限修饰符可以省略不写,写了也不出错

最后进行测试:

运行结果正常,证明咱们没错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AOP是什么?如何使用AOP? 的相关文章

  • 生产者消费者设计模式

    生产者和消费者模式 是一个经典的多线程设计模式 xff0c 生产者和消费者在同一时间段内共用同一个存储空间 xff0c 生产者往存储空间中添加产品 xff0c 消费者从存储空间中取走产品 xff0c 当存储空间为空时 xff0c 消费者阻塞
  • MySQL/MariaDB 字段约束

    主键约束 primary key 唯一且不为空 主键约束 xff1a 如果为一个列添加了主键约束 xff0c 那么这个列就是主键 xff0c 主键的特点是唯一且不能为空 通常情况下 xff0c 每张表都会有主键 添加主键约束 xff0c 例
  • MySQL/MariaDB 时间函数

    获取年月日时分秒 SELECT NOW 年月日及当前时间 SELECT CURDATE 年月日 SELECT CURRENT DATE 年月日 SELECT CURTIME 时分秒 SELECT CURRENT TIME 时分秒 年份 YE
  • MySQL/MariaDB 查询语句

    基础表 emp 去重查询 DISTINCT 查询职位 SELECT job from emp 显示所有职位 SELECT DISTINCT job FROM emp 查看表中包含的所有job类型 xff0c 重复的只显示一个 输出结果 限制
  • Spring框架通过工厂实现对象实例化过程

  • Eclipse常用设置

    1 界面风格 2 代码字体字号 3 工作空间编码
  • SpringBoot整合HikariCP连接池

    整合 HikariCP 连接池 创建依赖 配置连接池 打开 application properties 配置文件 xff0c 添加如下内容 spring datasource url 61 jdbc mysql dbgoods serve
  • SpringBoot框架整合MyBatis

    添加 MyBatis 启动依赖 参考官网mybatis org spring 找到Spring Boot菜单选项 基于菜单项找到MyBatis启动依赖 xff0c 一定要设置版本 xff0c Spring Boot 中没有设置 MyBati
  • BadTokenException: Unable to add window -- token android.os.BinderProxy

    由于遇到的是BadTokenException这个异常 xff0c 所以搜资料总结了一下 xff1a 这个异常总共有一下几种出现方式 xff1a 1 Unable to add window token null is not valid
  • SpringBoot框架整合SpringMVC、Mybatis框架,对数据库操作的工作原理

    Controller层 Controller层是接收用户访问的url信息 xff0c 再将获取到的内容发送到其他层级进行处理 xff0c 处理完成后返回新的url xff0c 使用户得到想要查询或是其他操作的页面 64 Controller
  • Lombok插件应用

    Lombok安装步骤 https blog csdn net weixin 47253919 article details 119871501 spm 61 1001 2014 3001 5502 常用注解 64 Setter 用于为描述
  • 类的属性(公有属性,受保护属性,私有属性)

    x是类的公有属性 class Animal x 61 10 def test self print Animal x print self x self是类本身 xff0c 等于Animal class Dog Animal def tes
  • linux网络配置(超简单,一看就会)

    2022 11 19 文章目录 前言一 linux网络 xff1f 二 使用步骤 1 查看本机ip 2 进入root用户 3 进入配置网络的目录 4 配置网络 5 重启网络服务 6 查看IP并测试网络 总结 一 linux网络 本章以配置虚
  • 【FPGA】四、按键消抖

    文章目录 一 按键消抖简介 二 按键消抖方式 1 硬件消抖 2 软件消抖 三 程序设计 1 设计思路 2 程序代码 3 仿真验证 总结 一 按键消抖简介 按键在我们日常生活中是很常见的 xff0c 主要有机械按键和虚拟按键 在我们用来进行F
  • 运行npm install出现这种问题怎么解决

    npm ERR code 1 npm ERR path C end springbootdtjr3 master src main resources admin admin node modules node sass npm ERR c
  • java中求平方根

    案例2 求平方根 需求 输入一个大于等于2的整数x xff0c 计算并返回x的平方根 结果只保留整数部分 xff0c 小数部分将被舍去 分析 计算x的平方根 就是x进行开方 开平方的调用函数是Math sqrt 但是要注意的是指保留整数部分
  • 解决Maven配置本地仓库路径不生效问题多个方法详解。(已成功解决自己遇到的问题)

    首先我尝试了很多种方法 xff0c 就是这个方法让我成功 xff0c 和大家分享一下 xff01 xff08 我用方法二成功的 xff01 xff09 maven本地仓库默认值 xff1a 用户家目录 m2 repository 由于本地仓
  • JAVA编写程序,打印九九乘法表(涵盖三种表达形式)

    运用java写出九九乘法表可以概括为三种表达形式 一是长方型 二是正三角型 三是倒三角型 无论是那种 xff0c 用的都是for循环 思路 xff1a 用两个for循环嵌套循环出因子a乘因子b等于乘积 xff0c 外循环代表因子a xff0
  • 【路径规划】蚁群算法机器人栅格地图最短路径规划【含Matlab源码 1618期】

    一 蚁群算法及栅格地图简介 1 蚁群算法 1 1 蚁群算法的提出 蚁群算法 ant colony optimization ACO 又称蚂蚁算法 是一种用来寻找优化路径的机率型算法 它由Marco Dorigo于1992年在他的博士论文中提
  • 遇见Java

    Java是一门面向对象的编程语言 xff0c 不仅吸收了C 43 43 语言的各种优点 xff0c 还摒弃了C 43 43 里难以理解的多继承 指针等概念 xff0c 因此Java语言具有功能强大和简单易用两个特征 Java语言作为静态面向

随机推荐

  • CSS基础-17-拓展-标签居中

    拓展 标签水平居中方法总结 margin 0 auto 如果需要让div p h 大盒子 水平居中 可以通过margin 0 auto 实现 注意点 1 如果需要让 div p h 大盒子 水平居中 xff0c 直接给当前元素本身设置即可
  • 用HTML和css写一个简单地购物小票

    效果图 HTML代码 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt 小票 lt title gt lt link
  • AJAX详解

    1 AJAX是什么 xff1f AJAX即 Asynchronous JavaScript and XML xff08 异步的JavaScript与XML技术 xff09 xff0c 指的是一套综合了多项技术的浏览器端网页开发技术 2 异步
  • 计算机一级必考的10个Excel函数,让我来告诉你

    计算机一级必考的10个Excel函数 xff0c 让我来告诉你 有同学问 xff1a 计算机一级Excel要考哪些函数啊 xff1f xff0c 下图的10个函数就是一级必考的 001 sum求和函数 定义 xff1a 对指定参数进行求和
  • 【一则文章带你了解JavaScript】

    前言 xff1a 想要入门JS xff0c 那我们必须首先了解一下JS的作用 xff0c 我们学习后可以做些什么呢 xff1f 一 首先 xff0c 网页中的表单动态校验以及密码强度的检测是会用到JS的 二 其次 xff0c 我们的网页高级
  • jQuery实现王者荣耀手风琴案例(知识块讲解+案例)

    前言 xff1a 这个案例是几年前的了 xff0c 现在的王者官网是没有这个手风琴模块的 xff0c 我了解到这个案例 xff0c 是受到了黑马程序员知名教师 pink老师的启发 xff0c 我相信大家也都不陌生 xff0c 同样也是我非常
  • 错误问题: Cannot read property ‘XXX‘ of undefined

    undefined不能读取属性XXX 说明定义变量里的值是undefined 查看报错的代码顺藤摸瓜 那打印console看一下 很关键 一定要学会打印 有可能是代码的书写错误了 xff08 大意写错了 xff09 当发现问题后 要学会顺腾
  • Node.js——fs的模块的读取文件-书写文件

    目录 一 fs模块的介绍与初始化 二 fs readFile 读取文件 第二种方法 xff1a 失败演示 xff1a 三 小结 四 fs writeFile 方法向指定文件中写入内容 五 案例 整理用户信息 一 fs模块的介绍与初始化 fs
  • MySQL卸载不干净-MySQL Connector Net xxx文件怎么也删除不了?一招解决它

    相信很多人都遇到过这个问题 xff0c MySQL手动总是卸载不干净 今天没想到让我遇到了 xff0c 那么它就是自讨苦吃 哈哈哈 xff08 这波感谢一下微软 xff0c 为什么 xff1f 大家往下看 xff09 绝招 xff1a 既然
  • uniapp -- 关于uni.navigateTo方法无法跳转的解决方法

    今天做页面跳转的时候遇到了一个问题 xff0c uni navigateTo 方法不是万能的 x1f914 我的需求是在一个component目录下的一个组件中点击遍历出来的组件进入另一个组件 xff0c 我觉得有点绕 xff0c 所以我把
  • Python入门第一章笔记 从安装到编写hello world

    1 下载Python安装包 xff1b 可以到官网下载 xff1a https www python org 但是如果没有翻墙的话 xff0c 下载会很慢 25M安装包 xff0c 需要1个小时以上 如果没有耐心等可以在csdn进行下载 x
  • 谈谈 《 JavaScript - DOM编程艺术 》这本书

    前言 好吧 xff0c 现在已经2023年了 xff0c 对于这本书 xff08 第二版 xff09 来说可能有点老了 xff0c 这本书不是很难理解 xff0c 但也不是很适合新手读 xff0c 当然 xff0c 这本书并不是百宝书 x1
  • 前端程序员 从学校到工作转变的学习历程

    今天是星期一 xff0c 美好而又不是那么美好的上班开始了 xff0c 从学校到职场也有几个月时间了 xff0c 整体来说体验一般般 x1f914 xff0c xff08 请原谅我 这篇文章不配一张图的话 xff0c 会显得文字密密麻麻的
  • 分享项目 - Vue3 + TS + element-ui-plus 项目 -- Table表格表单

    文章目录 前言项目地址以及怎么阅读别人的代码整体代码分页数据作者是怎么处理的 usePagination顺藤摸瓜找到 api 接口的封装api 接口再往底层找全局请求封装与请求拦截器 service ts 前言 今天看一个 ts 项目的 t
  • SpringBoot工程的创建流程

    文章目录 一 初始化时导入的几个基本依赖二 pom文件需要修改的几个地方三 pom文件需要再增加的几个依赖四 maven仓库记得改成自己电脑本地的 xff01 xff01 xff01 五 报错的关于test目录的两个包六 根据数据创建实体类
  • 在matlab中使用find()函数删选数据

    find xff08 xff09 函数 可以查找非零元素的索引和值 拿具体实例来讲 clear clc A 61 1 2 3 456 66 77 343 44 4 3 4 5 A find A 2 gt 61 50 61 删选出A矩阵中第二
  • 【数据结构】二叉树的构建(C语言实现)

    1 树概念及结构 1 1树的概念 树是一种非线性 的数据结构 xff0c 它是由n xff08 n gt 61 0 xff09 个有限结点组成一个具有层次关系的集合 把它叫做树是因 为它看起来像一棵倒挂的树 xff0c 也就是说它是根朝上
  • 解决resultMap报错

    发现问题是使用resultMap来指定类型封装结果的时候出现错误 错误如下 首先排除代码层面的错误 点开错误也没有发现原因 经过查找原来是数据库的字段名和实体的实体名不一致 resultMap则不能自动封装数据 使用reultType 也并
  • Linux防火墙——iptables以及firewalld的使用介绍

    本文基于Linux上CentOS 7版本配合iptables iptables services firewalld等服务进行演示 一 防火墙概念以及Netfilter机制介绍 1 概念 2 防火墙两大类型 3 Netfilter功能 二
  • AOP是什么?如何使用AOP?

    AOP 基本概念是什么 xff1f 什么是AOP xff1f AOP 就是面向切面编程 xff0c 或者叫面向方面编程 xff0c 或者开玩笑的说叫面向方便面编程 在软件业 xff0c AOP为Aspect Oriented Program