现在的位置: 首页 > 综合 > 正文

Spring AOP—1、AOP基本概念

2014年02月18日 ⁄ 综合 ⁄ 共 1544字 ⁄ 字号 评论关闭

        AOP并不是Spring的东西,Spring集成了AOP的功能,AOP是种概念,好比OOP,同OOP相比,差别当然就是一个是A一个是O.....:>>。

这里O比较熟悉就是Object表示对象的意思,OOP的核心是对象,同样对于AOP来说这里A代表Aspect,也就是AOP的中心是Aspect,Aspect通常称作“切面”,个人还是喜欢叫做“方面”。

        AOP其实是从另一个角度来思考编程结构,它的角度是这样的,我们有时候会有要干预某些对象的某些特殊动作的需求,但是我们不希望去修改对象,因为一方面我们的这种需求涉及的对象多种多样,另一方面我们还是想希望保持对象的弹性,当我们所做的干预发生调整的时候不需要改动太多的东西(不需要改动对象,只需要改动我们干预的那些东西)。

         比如这样一个例子,对于一些交通工具比如汽车、电动车,我们希望他们在出发前能够把时间告诉我们,在他们到达地点后也把地点告诉我们,这里假设汽车、电动车都是对象,而出发和到达作为对象的两个方法。我们没有办法让汽车或者电动车回到工厂里重新改造添加相应的功能(重新修改代码,增加接口,然后重新编译),当然也没有这个必要,工厂也不接这个活。于是我们可以自己在出发和停止(比如说出发就认为是转动钥匙到on位置,而停止就是到off位置)这两个我们关心的点上加上一些自己的装置,比如出发动作一结束(钥匙拨过去了)那么我们就自己启动个设备把时间记录下来,停止也类似。所以这个例子看到我们只关心对象的两个方法,其他的我们不关心,这种就叫做我们关心的“方面”(Aspect)。

         所以我们看到AOP的灵活性很大,它是种可以在运行时加入的东西(类不需要重新修改、编译),当然比如汽车是类A,加了记录时间设备的汽车是类B,这里会多出一个类来,这个类B通常叫做Proxy,Proxy叫做代理,它的意思也就是说B代理了A的功能,应用程序通过同B沟通实现又能记录时间又同时能停止和启动汽车的功能。AOP可以对多个类的多种动作进行“同时”关心,对不同的方法执行类似的动作,这种执行动作上面的例子是记录时间,在AOP里面这个所执行的动作叫做Advice(建议,也就是对所关心的方法采取的意见),另外一个术语就是针对AOP所关心的类方法(也可以是类成员、接口什么的)叫做Join
point;其实这里上面为了好理解自己直接认为Join point就是个函数,其实概念上Join Point是指程序执行中的某个点。还有个术语叫point cut,这个就是表示能够cut到对应point的说明语句(就是能够匹配到相应Join point的意思),这里主要是匹配我们感兴趣的函数,point cut一般是个正则表达式,比如我们习惯对查询数据库的函数写作Query.....(),那么Query*这个point cut就代表了所有的这些函数(也就是所有的Join point),你如果希望在所有的Query前缀的函数执行之前做些操作的话,你发现用AOP一下子就可以实现了(后面我们通过例子来看是如何做的)。

        所以注意到AOP它是中对程序结构的另一方面出发的,一般如果类越是”粗糙“,AOP发挥的余地和作用将会更大,如果类太”精细“了,可能AOP也没有必要了。这主要根据实际的应用。实际中相关应用还是蛮多的,比如你希望某个接口只允许某个用户访问,当然我们不可能在接口里面判断用户,这种做法不符合OOP,这里可以通过AOP,在这个接口调用前加入Advice,如果不是允许的用户,直接Exception掉,好比在同接口通讯间加了个防火墙一样,当然如果不要直接可以不去指定Aspect,所以在系统集成方面也是能有很大的帮助的。

抱歉!评论已关闭.