切点

小学时候接触过横切面,纵切面,针对几何体从某个方向做切,然后去考察切面的几何特征。
在中学的几何连续的曲线 都有切线,切线做成时候需要以切点为基准。
比如  圆 , 给一个切点就可以做一条切线。
再抽象的的理解就是一个 给曲线(点的集合) 通过切点  得到一个切线(还是点的集合)

几何中的切点更直观的是一个点,当然连续的切线可以给多个切点做切线这些切线是平衡的

但是aop中的切点本身就是一个集合,是在程序运行过程中处于阶段点的集合。
什么是阶段点呢?
方法的调用就是一个阶段点,但是程序运行的时候因为会有一系列的调用,
因此会产生一系列的阶段点的。
aop中将这些阶段点称为 连接点  Join Point  , 注意不是Cut Point
将来进行注入的位置就是这个  JoinPoint
==》  集合  ---切点---集合
类比几何学,
编程中的切点我们就是为了从一个集合得到另外一个集合,然后给这个新的集合做运算操作
这个是不是很熟悉,大学里数学中的群,空间是如何定义来着,一个集合和一组算子组成的
这样看切点的意义更像是一个或者一组特征值,通过特征值我们去筛选目标集合拦截得到另外一个符合特这值的新集合.然后给这个集合定义几个算子(前处理,后处理,异常处理等等)
那我们从集合的角度出发,如果我们将工程中的Controller ,Service ,Dao 或者其他组件 等都认为是Bean,那么我们的程序组件就是这些Bean的一个数学集合,bean都认为是集合中的元素,
现在想对一些符合条件的Bean做统一操作 , 那么我们定义切点,先筛选想要被处理的Bean,
所以切点就是可以从这些集合中能进行筛选的特征条件,
然后所得到的集合也就是得到的筛选结果集合,切面 = 筛选结果集合+切点+统一算子操作
很明显这种方式没有了层次的划分
如果将系统的服务  分为  controller , service , dao 三个层次,那么从aop角度看
这三个处于集合中是没有什么层次以及依赖调用关系的,因为它也不关注层次
而且有可能里面都是Service  , 有可能都是 Controller , 也有可能混搭存在

纵向的理解

从接口实现以及层次调用来看他们三者之间是呈现一种纵向的方式的,
例如 controller处于最顶层,中间是sevice , 底层是dao  
(严格按照这种模式进行编写,当然非要在controller中使用dao没错)
这种纵向是按照分层模式导致出现的,
另外继承扩展和面向接口调用也是处于纵向的编程方向的。

父类--子类--子类的子类...这样构成了一个层次

但是要注意如果我们只是在某一层上进行扩展,那么就是衍生出子类,这个时候在层级上的扩展就是横向的。比如在一个继承层次的第二层上面不断扩充平等概念,这样导致这个继承树第二层越来越宽,这种扩张明显就是横向的

比如 service接口有新生成一个实现service,这个新的serviceImpl和其他serviceImpl处于同一个层级。

横向

通过纵向的概念 , 那么AOP是面向横向的,
因为所有的bean都将处于一个集合内部,随着不断加入切点这个集合的长度是不断加大的
而且集合里面的Bean 是不关心他们的继承层次和实现层次的,统一认定他们就是一个Bean
从你的角度看可能集合里面有比如 Controller , Service , Dao ....你看他们本身有层次
如果从Aop角度看,都认定他们是Bean , 
可以这样思考:AOP把被筛选出来的东西统一给包装成一个  AopBean 的类型
这样一来AOP可以统一处理这这种类型的数据

明白这种扩展是横向的。给定一个Bean想被某个AOP统一处理,那么就给它定义符合切点的条件即可。这样这个bean就加入到了切面集合里面。而且这个bean并没有规定是 conroller,或者是service.

尤其在使用注解的情况下更加的明显了。

对于注解来说controller,service有可能是没有任何区别的。这样就是一种横向扩展。

【把层次中的任何一个类都可以拉入到这个横向切面里面,横向切面里面的bean集合是平行的】

称aop为面向数学集合的编程可能更形象一些,当然会和Java中的集合混淆。

Advice

通过切点得到切面之后,我们可以给这些切面中的元素做一些 统一性质的动作。
比如aop中常见的日志打印,事务管理等
因此需要专门提供advice的bean

AOP-纵向横向的区分和基本概念相关推荐

  1. 加个属性让div成纵向横向无缝滚动(支持IE和FF)

    <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. oracle 将查询结果纵向横向显示。

    使用max(decode())函数可以将将查询结果纵向横向显示: 例如:表 dict 编号(lxbh) 类型名称(lxmc) 101 变压器 102 断路器 103 电磁是电压互感器 104 电容式电 ...

  3. 使用 better-scroll 实现纵向横向双向滚动并设置吸顶

    使用 better-scroll 实现纵向横向双向滚动 需要达到的效果:右侧内容左右滚动时,左侧边栏不动,上下滑动时整体内容上下滚动 如图: 1.纵向滚动 安装并引入 import BScroll f ...

  4. Qt 5.12 for Android 环境搭建+设置图标纵向横向+发布

    Qt与Android的环境搭建 Qt for Android配置基本需求 可能发生的错误 Qt for Android设置图标的方法 Qt for Android设置在手机纵向横向方法 Qt for ...

  5. 职业规划纵向横向_金融行业之职业规划

    进入金融行业,对于很多同学来说都是心中向往的圣地.清晰的金融行业职业规划和明确的发展路径,就尤为重要. 做为过来人,首先聊聊如何做金融行业的职业规划. 职业规划包括短期职业规划和长期职业规划. 短期职 ...

  6. Spring AOP里面的几个名词的概念:

    (1)连接点(Join point):指程序运行过程中所执行的方法.在Spring AOP中,一个连接点总代表一个方法的执行. (2)切面(Aspect):被抽取出来的公共模块,可以用来会横切多个对象 ...

  7. 职业规划纵向横向_收下这份《职业规划喂饭式指南》

    果不其然! 上篇文章发布后,我收到了被拿来举反例的网友小哥的抗议~~~ 讲道理,最后他拿到的Offer还是十分不错的,从此以后我的朋友圈又多了一位第一手保真瓜主,他好我也好~ 那么本期<职业规划 ...

  8. datagridview 纵向 横向 合并单元格_每日一Excel技巧(熟能生巧):带公式的单元格,快速批量复制、填充...

    带公式的单元格,快速批量复制.填充技巧,提高工作效率. 方法一.拖拽填充柄 选中单元格,鼠标放在单元格右下角,当鼠标指针为黑色实心"十字"填充柄时,按住鼠标左键横向或纵向拖动,可将 ...

  9. datagridview 纵向 横向 合并单元格_Excel横向(行)筛选技巧分享,别人3分钟,你只要10秒...

    Excel的筛选功能只能对列(纵向)进行筛选,而不能实现横向筛选.而有些情况下,我们却需要用到横向的筛选. 比如下面的这个产品日销售数据表: 假如我们只想看到每种产品每天的销售金额,而把销量和单价隐藏 ...

最新文章

  1. 实例详解 DB2 排序监控和调优
  2. 一文看懂神经网络初始化!吴恩达Deeplearning.ai最新干货
  3. ffplay.c学习-7-以音频同步为基准
  4. fir.im Log Guru 正式开源,快速找到 iOS 应用无法安装的原因
  5. linux变量赋值取值,linuxshell编程对变量的赋值
  6. dos进入mysql不记得密码_windos mysql 忘记密码,无密码登录,重新登录
  7. php访问数据库例子,PHP访问MSSQL数据库(实例代码)
  8. 十七世纪的常用对数表是怎么算出来的
  9. Google Colab解压压缩包
  10. Qualcomm笔记
  11. 垃圾短信相关用户细分方案
  12. 公众号运营的小伙伴们看过来啦!
  13. 聊聊ringbuffer
  14. 结构体运算符与取余_c语言取余(c语言去整和取余)
  15. js修改身份证,手机号码为****的方法
  16. 电磁场的概念及常见电磁场产生设备
  17. XP下安装SQL SERVER企业版的一个新方法(转载)
  18. 魔兽争霸3 for Mac 汉化版 即时战略游戏 支持M1
  19. 【博应用官网】电脑无法停止通用卷设备该如何解决?
  20. tensorflow编码错误:TypeError: unsupported operand type(s) for *: ‘float‘ and ‘NoneType‘

热门文章

  1. 解决uni-app uniCloud小程序预览没有数据
  2. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
  3. 时间序列数据的白噪声检验
  4. 树莓派siri homekit_树莓派可以这样玩
  5. 【转载】音频基础知识
  6. 计算机学业水平测试表格题,2010 年信息技术学业水平考试试题
  7. android nvram读写,MTK Android平台Nvram与Gensor数据获取
  8. php取tet文件内容,PHP中使用PDFlib TET提取PDF中的文本
  9. 磕磕碰碰的Chrome之plugin开发
  10. 深圳大学计算机专业保研率,深圳最好的公立大学(本科阶段)南方科技大学,2018级保研率应该会提高到30%...