什么是AOP

AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP 的作用及其优势

作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强

优势:减少重复代码,提高开发效率,并且便于维护

AOP 的底层实现

实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

AOP 的动态代理技术

常用的动态代理技术

JDK 代理 : 基于接口的动态代理技术

cglib 代理:基于父类的动态代理技术

AOP 相关概念

Spring 的 AOP 实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。

在正式讲解 AOP 的操作之前,我们必须理解 AOP 的相关术语,常用的术语如下:

  • Target(目标对象):代理的目标对象
  • Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类
  • Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
  • Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义
  • Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知
  • Aspect(切面):是切入点和通知(引介)的结合
  • Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入

aop的重点概念:

Pointcut(切入点):被增强的方法

Advice(通知/ 增强):封装增强业务逻辑的方法

Aspect(切面):切点+通知

Weaving(织入):将切点与通知结合的过程

普歌-云言团队-Spring的AOP简介相关推荐

  1. 普歌-云言团队-Spring Boot入门:环境搭建Spring Boot HelloWorld

    Spring Boot入门:环境搭建Spring Boot HelloWorld 前言:SpringBoot 是来简化Spring应用开发, 约定大于配置, 去繁从简, just run就能创建一个独 ...

  2. 普歌—云言团队——最新Git的相关配置,集成IDEA使用

    Git-版本控制工具 1,常见的版本控制工具: ​ Git,SVM,CVS,VSS,TFS,Visual Studio Online 什么是Git: Git是一个版本控制工具,即你可以将你每一次对你的 ...

  3. 普歌-飞灵团队-ES6汇总

    ES6新特性 一.let 二.const 三.变量的解构赋值 四.模板字符串 五.简化对象写法 六.箭头函数 七.rest 参数 八.扩展运算符 九.Symbol 十.迭代器 十一.生成器 十 二.P ...

  4. 普歌-码灵团队-日期和时间的类

    普歌-码灵团队-日期和时间的类 一.毫秒值的概念和作用 二.Date类的构造方法和成员方法 构造方法: 空参构造:获取当前系统的日期和时间 带参构造:Date(long date):传递毫秒值,把毫秒 ...

  5. 普歌灵鹄团队java面试题和计算机网络面试题:

    普歌灵鹄团队java面试题和计算机网络面试题: java面试题: list集合下面都有啥 Arrylist,linklist,vector. Arrylist和linklist的区别: (1)Arry ...

  6. 普歌-码灵团队-java中的equals方法和toString方法及总结

    普歌-码灵团队:Object类中的方法介绍及其用法 一.Object类 二.方法介绍 1.toString方法 2.重写equals方法: 3. 拓展 三.总结 一.Object类的简单介绍 二.Ob ...

  7. 普歌-智音团队-淘宝精品服饰案例

    普歌-智音团队-淘宝精品服饰案例 效果 鼠标移入左侧的商品名称时,右侧图片会跟随左侧商品名称发生相应的变化 主要思路:1. 核心原理:鼠标经过左侧盒子某个小li,就让内容区盒子相对应图片显示,其余的图 ...

  8. 普歌-码灵团队——简述io

    io io概述 什么是io io的分类 字节流 字节输出流 字节输出流的续写和换行 字节输入流 字节输入流读取字节数据 字符流 字符输入流 Reader类和FileReader类 字符输入流读取字符数 ...

  9. Spring教程--AOP简介

    AOP的简介 1 什么是AOP AOP Aspect Oriented Programing 面向切面编程 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存 ...

最新文章

  1. 程序员最喜欢说的十句话,看看你最喜欢说哪句?
  2. 鲲鹏来了,在EulerOS试用.NETCore-3.1
  3. python 档案管理系统_Python 写入档案的 4 个方法
  4. shell linux教程,Shell入门基础知识
  5. Javascript Proxy对象 简介
  6. Echarts简单介绍
  7. 计算机插本2a院校,广东省专插本2A院校有哪些
  8. C++ const与static
  9. 史上最全Java学习资料,共14W字,耗时半年整理
  10. 12月第1周网络安全报告:85.9万境内主机感染病毒
  11. oracle 查询入职年限,计算入职年限员工人数占总人数的百分比
  12. Android svc命令
  13. OutMan——Objective-C内存管理
  14. plot函数--R语言
  15. 减少网页加载时间的6个技巧
  16. Laravel重写或者覆盖vender下面的方法
  17. oracle gho系统吗,系统镜像GHO、WIM、ESD几种格式的区别
  18. JAVA12_10总结
  19. ZigBee协议栈安装失败解决方法
  20. 破解分布式数据库全局死锁难题 GBase 8c引领数据库领域变革

热门文章

  1. C++:有限差分求解非粘性时变汉堡方程 和拉克斯-温德罗夫方法(附完整源码)
  2. 直播APP开发时:基于腾讯sdk的音视频功能实现
  3. MacBook上u盘无法格式化
  4. python(json):序列化 、反序列化 --- json.dump() / json.dumps() / json.load() / json.loads()的使用
  5. 2022-2028年全球与中国USB充电器行业竞争格局与投资战略研究
  6. DEM转换为gltf
  7. ngram java_突出与模糊和ngram
  8. javascript 实现简单拖拽(鼠标事件 mousedown mousemove mouseup)
  9. 指针,引用,与按值传递
  10. web性能优化之Waiting(TTFB)简介