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 ...
随机推荐
- How does a browser know which response belongs to which request?
Today I knows that the server never send a request to a client! It just make response~ So,if the bro ...
- Go的包管理工具(一)
在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...
- 图数据库-Neo4j-常用算法
本次主要学习图数据库中常用到的一些算法,以及如何在Neo4j中调用,所以这一篇偏实战,每个算法的原理就简单的提一下. 1. 图数据库中常用的算法 PathFinding & Search 一般 ...
- 怎样查看 MySQL 版本号
1. 在命令行中直接查看版本号 mysql -V 2. 在 mysql --help 中查找与版本相关的信息 mysql --help | grep Ver 3. 在mysql命令行里面查看版本信息 ...
- UVA Tress in a Wood
https://vjudge.net/problem/UVA-10214 题意:给定一个坐标系.|x|<=a, |y|<=b 求坐标系中有多少点是可以从原点直接看到(即从原点和一个点连线, ...
- Angular 变更检测
angular 的钩子函数有 content 和 view , Docheck 子控件中有属性变化的时候,父组件的 Docheck content view 这3个会依次执行,即使这个属性不在 ...
- TCP面向字节流和UDP面向报文的区别
TCP面向字节流 打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子.矿泉水瓶.锅碗瓢盆)接水. 上面的例子中,往水 ...
- TypeScript入门三:TypeScript函数类型
TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明Ty ...
- C# 修改Config文件,增删查改
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/BYH371256/article/det ...
- docker-compose 编排文件小疑点
在学习docker-compose的时候,查看了下st2中的docker-compose.yml文件,有个地方没搞明白 env_file 制定的文件路径,一开始以为是在对应的容器中的conf目录中,但 ...