JavaWeb_(Spring框架)SpringAOP面向切面编程
SpringAOP:面向切面编程(面向fifter编程)
通俗易懂术语:所有纵向重复的代码,我们提取成横向的代码

以下文章内容参考知乎:从0带你学习SpringAOP,彻底的理解AOP思想 传送门
1、什么是AOP?
更为准确的说AOP其实是一种软件设计思想,而不是一种特定技术,但是它又可以应用到任何的技术领域,只要是理解了AOP这种思想,其实都可以将它运用到项目中去。
既然说这到这个问题,那么到底什么是AOP?它又是应用在哪些场景下呢?
AOP在我看来可以用一句很简单的话来进行概述就是,“程序在运行时,动态的将代码切入到类的指定方法或者说指定位置上”,这就是AOP。这样说大家是不是有点明白了。
Java中面向对象的三大特征分为封装、继承、多态,假设现在有两个类,一个为Teacher(老师类)和Student(学生类),学生和老师都得吃饭、睡觉,但是老师和学生有具有自己的一些行为,比如老师会教书,但是学生不需要教书,学生却需要听课,根据面向对象的三大特征,我们可以将老师和学生的共同所具有的行为提取出来,让老师和学生去继承就可以,这样就提高了我们代码的复用性。
我曾经以为这样就很完美了,直到我遇到这种情况,这是一个方法,进入方法执行方法体的时候,要先开启事务,最后提交事务,并且每个方法都是受事务控制的,这样我们可以发现,出现了大量的重复代码,那么有没有什么什么比较好的办法,来解决这个问题呢?

画这样一个图,大家应该就可以看的更清楚了,我们的业务代码就是圈里面的核心,事务管理在圈的外层,我们的业务代码是受事务的管控的。

再来一个更直观的图,可以看到,现在将我们的业务代码和原来重复的代码进行了分离,独立为一个单独的模块,这样我们的业务中就不会有那么多冗余的代码了。但是大家可能又要问了,你这么分离出来,怎么样将它融合进去呢?其实这就是AOP解决的问题。

2. AOP的应用场景
从上面的例子中大家应该可以大致了解AOP的作用,那么在实际的开发中呢想要使用AOP它是需要一些场景的,像一些比较常见的场景就是:系统的性能检测、访问控制、事务管理以及日志记录。
我现在在做的项目中在权限控制、日志记录、匹配映射参数都是使用AOP来完成的,所以说搞懂AOP可以帮你做好多事情。
3. AOP的术语
1) 连接点(JoinPoint)
什么是连接点,看了一下官方的,看完懵逼,说的太官方了,其实所谓的连接点就是“一个应用执行过程中能够插入一个切面的点”,比如说黑客攻击你的电脑,他总要找到一个入口,没有入口就无法进行攻击,连接点就相当于这个入口;2) 切点(Pointcut)
一个程序中可能存在多个连接点,如果我们想要找到我们需要的连接点,那么就需要根据切点来进行定位;3) 增强(Advice)
增强就是织入目标类连接点上的一段代码,就是黑客进入到你的电脑后要做的事情;4) 目标对象(Targer)
增强逻辑的织入目标类,黑客攻击你的电脑,那么你的电脑就是目标类;5) 引介(IntroductIon)
引介是一种特殊的增强,它为类添加了一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,也可以动态地为该业务添加接口的实现逻辑,让业务类变成这个接口的实现;6) 织入(Weaving)
织入其实就是将我们增强的代码添加到具体连接点上的过程;7) 代理(Proxy)
一个类被AOP织入增强后,就产生了一个结果类,它融合了原类和增强逻辑的代理类;8) 切面(Aspect)
切面有切点和增强组成,它既包括横切逻辑的定义,也包括连接点的定义;
通过前面简单的介绍,相比大家对AOP已经有了一个简单的认识,后面再说了一下AOP的一些术语,大家好好把这些理解一下,一定要把这些概念理清楚,后面才不会混淆。今天先带大家简单认识一下AOP,下篇带大家做一些例子,从而更亲近的认识AOP。
JavaWeb_(Spring框架)SpringAOP面向切面编程的更多相关文章
- Spring框架 AOP面向切面编程(转)
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- Spring框架——AOP面向切面编程
简介 AOP练习 使用动态代理解决问题 Spring AOP 用AspectJ注解声明切面 前置后置通知 利用方法签名编写AspectJ切入点表达式 指定切面的优先级 基于XML的配置声明切面 Spr ...
- 详解Spring框架AOP(面向切面编程)
最近在学习AOP,之前一直很不明白,什么是AOP?为什么要使用AOP,它有什么作用?学完之后有一点小小的感触和自己的理解,所以在这里呢就跟大家一起分享一下 AOP(Aspect-Oriented Pr ...
- Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring AOP(面向切面编程)
面向切面编程(AOP)和面向对象编程(OOP)类似,也是一种编程模式.Spring AOP 是基于 AOP 编程模式的一个框架,它的使用有效减少了系统间的重复代码,达到了模块间的松耦合目的. AOP ...
- Spring 08: AOP面向切面编程 + 手写AOP框架
核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...
- Spring:AOP面向切面编程
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...
- 03-spring框架—— AOP 面向切面编程
3.1 动态代理 动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(不是真实定义的类)在程序运行时由 JVM 根据反射等机制动态生成的.代理对象与目标 ...
- spring:AOP面向切面编程02
参考: https://blog.csdn.net/jeffleo/article/details/54136904 一.AOP的核心概念AOP(Aspect Oriented Programming ...
随机推荐
- 空间变换网络(STN)原理+2D图像空间变换+齐次坐标系讲解
空间变换网络(STN)原理+2D图像空间变换+齐次坐标系讲解 2018年11月14日 17:05:41 Rosemary_tu 阅读数 1295更多 分类专栏: 计算机视觉 版权声明:本文为博主原 ...
- Docker 杂记
1.配置阿里云加速 :可以找到各种加速URL.比如 https://tnxkcso1.mirror.aliyuncs.com/ 2.windows 配置: 3.docker info可以看到新的配置已 ...
- SqlServer学习之存储过程
前言:对于存储过程一直有一种抵触的心理,因为毕业至今所在的公司开发组都不是很规范,对于开发的一些注意事项并没有很多的规定,只是在知乎上查找相关知识的时候,看到很多人对于在程序里使用存储过程的不好之处都 ...
- JS-实现横向手风琴
横向手风琴-- 鼠标悬浮某一张图片,图片显示,其他图片影藏. <div class="content"> <ul> <li class="c ...
- java Calendar Date 获取指定日期所在月或年的第一天和最后一天
一.获取传入日期所在月的第一天 public static Date getFirstDayDateOfMonth(final Date date) { final Calendar cal = Ca ...
- springboot集成websocket的两种实现方式
WebSocket跟常规的http协议的区别和优缺点这里大概描述一下 一.websocket与http http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能 ...
- 解决chrome没有允许添加flash的问题
有时候测试的时候,需要开启flash 但是Chrome一般都是自己弹出来的 现在弹不出来怎么办 自己添加? chrome://settings/content/flash 对不起 根本没有的 怎么解 ...
- Flutter 34: 图解自定义 View 之 Canvas (一)
小菜最近在学习自定义 View,刚了解了一下 Paint 画笔的神奇之处,现在学习一下 Canvas 画布的神秘之处.Flutter 提供了众多的绘制方法,小菜接触不深,尽量都尝试一下. Canvas ...
- 6.AOP配置与应用(xml的方式)
xml 配置 AOP 1.将 拦截其器对象 初始化到容器中 2.<aop:config> <aop:aspect.... <aop:pointcut <aop:befor ...
- 4.AOP原理模拟
AOP Aspect-Oriented-Programming 面向切面编程 a)是对面向对象的思维方式的有力补充 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码 a)Fil ...