你的位置:首页 > 软件开发 > Java > 浅析Spring AOP

浅析Spring AOP

发布时间:2016-06-19 22:00:10
在正常的业务流程中,往往存在着一些业务逻辑,例如安全审计、日志管理,它们存在于每一个业务中,然而却和实际的业务逻辑没有太强的关联关系。                           图1  这些逻辑我们称为横切逻辑。如果把横切的逻辑代码写在业务代码中,散落在各个地方,则会变 ...

浅析Spring AOP

    在正常的业务流程中,往往存在着一些业务逻辑,例如安全审计、日志管理,它们存在于每一个业务中,然而却和实际的业务逻辑没有太强的关联关系。

        浅析Spring AOP

                   图1

  这些逻辑我们称为横切逻辑。如果把横切的逻辑代码写在业务代码中,散落在各个地方,则会变得非常难以维护,代码也会显得过于臃肿。

  Spring AOP为处理这些问题提供了一种很好的方法。

1 AOP术语

  1 通知(advice)。通知是指真正执行的目标逻辑。例如为系统记日志,那么通知做的事情,就是记录日志。

  2 连接点(joinpoit)。连接点指何时执行advice的代码。系统中如果想要为所有的start()方法执行之前,记录一条"our system is starting"的日志,那么,start()方法被调用的时机,称为一个连接点。

  3 切点(pointcut)。切点指何处执行advice的代码。例如指定特定的一个路径下的start()方法被调用时,执行advice的代码,那么,这个特定的路径可以理解为切点。通常我们使用正则表达式定义匹配的类和方法来确定切点。

  4 切面(aspect)。 切面是通知、切点和连接点的全部内容。它定义了何时在何处,完成什么功能。

  5 织入(weaving)。织入指实际代码执行到切点时,完成对目标对象代理的过程。织入有如下三种方式:

    a.编译器织入。需要特殊编译器支持,例如AspectJ的织入编译器,在编译期间将代码织入。

    b.类加载时。目标类在载入JVM时将切面引入。需要特殊的classLoader支持,改变目标类的字节码,增加新的动作。

    c.运行期。在运行期运用动态代理技术,代理目标类。Spring AOP就是使用这种方式。

2 Spring对AOP的支持

  Spring对AOP提供了多种支持,大体上分为2种思路。

  1 使用动态代理,在运行期对目标类生成代理对象。代理类封装了目标类,并拦截被通知的方法的调用,再将调用转发给真正的目标类方法调用。在代理类中,可以执行切面逻辑。基于这种模式,仅限于对方法的拦截。如果想要实现更细粒度的拦截,例如特定的字段的修改,则需要使用第2种思路了。

  2 使用AspectJ特有的AOP语言。这种方式的成本在于,需要学习AspectJ的语法。

  大多数情况下,第一种思路已经可以满足我们的需求。

3 Demo

  我们可以使用execution指示器来指示切点。如图2

  浅析Spring AOP

                   图2

  execution指示器具体指定了哪个包下面哪个类执行什么方法时,会被织入横切逻辑。Spring AOP的demo网上有很多,但是原理其实都一样。这里贴出其中一种。

  我们需要2个类,一个类(Biz)用作正常的业务逻辑,一个类用作横切(AdviceTest)。同时写一个类Main测试

  1.Biz

浅析Spring AOP浅析Spring AOP
1 public class Biz {2   public void doBiz(){3     System.out.println("doing biz");4   }5 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:浅析Spring AOP

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录