AOP-纵向横向的区分和基本概念

切点

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

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

但是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
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值