我所理解的Spring AOP的基本概念
Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了很多例子后,写一些自己理解的一些spring的概念。要理解面向切面编程,要首先理解代理模式和动态代理模式。
假设一个OA系统中的一个功能是查看考勤信息,那么我们假设有要实现这个功能,要经历的步骤是:
1.启动日志,进行记录。
2.启动安全性的框架进行安全检验
3.验证权限
4.如果有权限,则查看考勤记录,如果无权限,则输出没有权限。
我们的目标方法是查看考勤记录,而前面执行了那么多与目标方法无关的方法。
那些与业务逻辑无关的方法叫切面。切面中的方法为通知。当验证权限通过后,就执行目标方法,则切入点就是验证权限的那个方法。形成代理方法的过程叫做织入,在客户端调用的方法就是连接点。
切面
日志、安全性的框架、权限的检查等,总之和业务逻辑没有关系的都可以看做切面
通知
切面中的方法
切入点
只有符合切入点,才能把通知和目标方法结合在一起(就像例子中,只有符合了权限,才能查看考勤记录)
连接点
客户端调用的方法
代理对象的方法=通知+目标方法(代理方法增强了对象的目标方法)
aop(面向切面编程):做到了代码块的重用
面向切面编程为什么做到了代码块的重用?那些切面在不同的地方可以调出来用,切面就是不同功能的代码块,可以通过代理模式增强某些目标方法。
再举个例子,对数据库的增删改查,增删改要开启事务管理,查不需要开启事务管理,对于开启事务,和提交事务,都属于非目标方法,可以看做切面,而增删改,是目标方法。开启事务和提交事务中的方法,是通知。通过动态代理模式,可以把通知和目标方法结合在一起。
我所理解的Spring AOP的基本概念相关推荐
- Spring AOP的一些概念
切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子. 在Spring AOP中,切面可以使用通用类(基于模 ...
- 从代理机制到Spring AOP
这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...
- 从代理机制到Spring AOP,这篇给你安排的明明白白的
这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...
- spring aop实现原理_Spring 异步实现原理与实战分享
最近因为全链路压测项目需要对用户自定义线程池 Bean 进行适配工作,我们知道全链路压测的核心思想是对流量压测进行标记,因此我们需要给压测的流量请求进行打标,并在链路中进行传递,那么问题来了,如果项目 ...
- 顺序执行_执行流程 | 你真的了解Spring AOP的执行顺序吗?
Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...
- gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...
Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
上一篇: Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring? 上一篇从Web开发演进过程的一个侧面简述了一下为什么会有Spring?事实上只介绍了为什么会有Spr ...
- 执行流程 | 你真的了解Spring AOP的执行顺序吗?
Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...
- Spring AOP 的用途
1. 引言 在软件开发中,面向切面编程(Aspect-Oriented Programming,AOP)是一种重要的编程范式.它通过将横切关注点(cross-cutting concern)从核心业务 ...
最新文章
- c语言输出最后不带空格,新人提问:如何将输出时每行最后一个空格删除
- 影响软件测试未来的5件事 (译)
- Ello讲述Haar人脸检测:易懂、很详细、值得 ...
- activity得到service的数据的方法
- iqueryable怎么进行操作_钢结构施工要点有哪些?怎么进行操作?
- 为什么美国的程序员工作轻松、还加班少? 公众号程序员江湖
- [推荐]大量 Blazor 学习资源(二)
- linux环境变量命名规范,Linux就该这么学 -- 重要的环境变量
- Polkadot 0.9.2版本正式发布,对平行链启动至关重要
- 【mysql】期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)
- 巧解汽车冬季病 启动无力别“轰油”热车
- 招银网络-信息科技风险管理工程师-笔试-安全
- 【centos7x86】安装源 设置基础软件仓库时出错 解决办法
- linux清空文件夹的命令_Linux 学习
- 教程篇(7.0) 10. FortiGate安全 反病毒 ❀ Fortinet 网络安全专家 NSE 4
- 程序化交易学习笔记(六、模式、日内交易模型、Tick模型)
- TCP BBR之Startup gain的另一种推导法以及最新进展
- 微信公众平台开发:JS API支付
- 【逻辑与计算理论】λ演算、组合子逻辑的历史背景
- Android混淆发布依赖
热门文章
- Dotfuscator代码混淆工具的使用
- 利用FFmpeg切割视频
- Linux基础知识汇总(2)...持续更新中
- 媲美光纤!WiFi传输速度已可达100Gbps
- 解决 The mysql extension is deprecated and will be r
- Lua(Codea) 中 table.insert 越界错误原因分析
- unity替换mesh测试
- linux源码包卸载方式
- View 5.1 重装上阵(4—基础架构篇)
- oracle 查询重复数据并且删除, 只保留一条数据