Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了很多例子后,写一些自己理解的一些spring的概念。要理解面向切面编程,要首先理解代理模式和动态代理模式。

假设一个OA系统中的一个功能是查看考勤信息,那么我们假设有要实现这个功能,要经历的步骤是:

1.启动日志,进行记录。

2.启动安全性的框架进行安全检验

3.验证权限

4.如果有权限,则查看考勤记录,如果无权限,则输出没有权限。

我们的目标方法是查看考勤记录,而前面执行了那么多与目标方法无关的方法。

那些与业务逻辑无关的方法叫切面。切面中的方法为通知。当验证权限通过后,就执行目标方法,则切入点就是验证权限的那个方法。形成代理方法的过程叫做织入,在客户端调用的方法就是连接点。

切面

日志、安全性的框架、权限的检查等,总之和业务逻辑没有关系的都可以看做切面

通知

切面中的方法

切入点

只有符合切入点,才能把通知和目标方法结合在一起(就像例子中,只有符合了权限,才能查看考勤记录)

连接点

客户端调用的方法

代理对象的方法=通知+目标方法(代理方法增强了对象的目标方法)

aop(面向切面编程):做到了代码块的重用

面向切面编程为什么做到了代码块的重用?那些切面在不同的地方可以调出来用,切面就是不同功能的代码块,可以通过代理模式增强某些目标方法。

再举个例子,对数据库的增删改查,增删改要开启事务管理,查不需要开启事务管理,对于开启事务,和提交事务,都属于非目标方法,可以看做切面,而增删改,是目标方法。开启事务和提交事务中的方法,是通知。通过动态代理模式,可以把通知和目标方法结合在一起。

我所理解的Spring AOP的基本概念相关推荐

  1. Spring AOP的一些概念

            切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子. 在Spring AOP中,切面可以使用通用类(基于模 ...

  2. 从代理机制到Spring AOP

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  3. 从代理机制到Spring AOP,这篇给你安排的明明白白的

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  4. spring aop实现原理_Spring 异步实现原理与实战分享

    最近因为全链路压测项目需要对用户自定义线程池 Bean 进行适配工作,我们知道全链路压测的核心思想是对流量压测进行标记,因此我们需要给压测的流量请求进行打标,并在链路中进行传递,那么问题来了,如果项目 ...

  5. 顺序执行_执行流程 | 你真的了解Spring AOP的执行顺序吗?

    Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...

  6. gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...

    Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...

  7. Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?

    上一篇: Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring? 上一篇从Web开发演进过程的一个侧面简述了一下为什么会有Spring?事实上只介绍了为什么会有Spr ...

  8. 执行流程 | 你真的了解Spring AOP的执行顺序吗?

    Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序. 聊一聊毕业四个 ...

  9. Spring AOP 的用途

    1. 引言 在软件开发中,面向切面编程(Aspect-Oriented Programming,AOP)是一种重要的编程范式.它通过将横切关注点(cross-cutting concern)从核心业务 ...

最新文章

  1. c语言输出最后不带空格,新人提问:如何将输出时每行最后一个空格删除
  2. 影响软件测试未来的5件事 (译)
  3. Ello讲述Haar人脸检测:易懂、很详细、值得 ...
  4. activity得到service的数据的方法
  5. iqueryable怎么进行操作_钢结构施工要点有哪些?怎么进行操作?
  6. 为什么美国的程序员工作轻松、还加班少? 公众号程序员江湖
  7. [推荐]大量 Blazor 学习资源(二)
  8. linux环境变量命名规范,Linux就该这么学 -- 重要的环境变量
  9. Polkadot 0.9.2版本正式发布,对平行链启动至关重要
  10. 【mysql】期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)
  11. 巧解汽车冬季病 启动无力别“轰油”热车
  12. 招银网络-信息科技风险管理工程师-笔试-安全
  13. 【centos7x86】安装源 设置基础软件仓库时出错 解决办法
  14. linux清空文件夹的命令_Linux 学习
  15. 教程篇(7.0) 10. FortiGate安全 反病毒 ❀ Fortinet 网络安全专家 NSE 4
  16. 程序化交易学习笔记(六、模式、日内交易模型、Tick模型)
  17. TCP BBR之Startup gain的另一种推导法以及最新进展
  18. 微信公众平台开发:JS API支付
  19. 【逻辑与计算理论】λ演算、组合子逻辑的历史背景
  20. Android混淆发布依赖

热门文章

  1. Dotfuscator代码混淆工具的使用
  2. 利用FFmpeg切割视频
  3. Linux基础知识汇总(2)...持续更新中
  4. 媲美光纤!WiFi传输速度已可达100Gbps
  5. 解决 The mysql extension is deprecated and will be r
  6. Lua(Codea) 中 table.insert 越界错误原因分析
  7. unity替换mesh测试
  8. linux源码包卸载方式
  9. View 5.1 重装上阵(4—基础架构篇)
  10. oracle 查询重复数据并且删除, 只保留一条数据