如何正确使用AOP

来源:互联网 发布:转子动力学分析软件 编辑:程序博客网 时间:2024/04/29 17:29

AOP也发展了不久了,虽然在工作上也一直在用,不过毕竟没有深入了解过,停留在概念上的理解,和使用的阶段上。这篇主要讲讲,AOP如何正确的使用它。


首先需要知道,目前毕竟流行的AOP框架,上篇文章也介绍了AOP实现的原理,对Spring这个大家庭来说,它的AOP远远没有这么简单。目前使用毕竟多的

几种方式如下:

  • Jboss Aop:基本上没有用过,所以没有发言权,Jboos毕竟之前毕竟火AOP也有自己的一套,现在jboss慢慢分离出来很多东西,独立出来,感觉是Jboss Aop用的不多了。
  • Spring Aop:Spring自己原生的Aop,只能用一个词来形容:难用。 你需要实现大量的接口,继承大量的类,所以spring aop一度被千夫所指。这于他的无侵入,低耦合完全冲突。不过Spring对开源的优秀框架,组建向来是采用兼容,并入的态度。所以,后来的Spring 就提供了Aspectj支持,也就是我们后来所说的基于纯POJO的Aop。本人也是推进Aspectj实现AOP的
  •   Aspectj  这是一个AOP编程语言,一种基于Java平台的面向切面编程的语言,官网地址是http://www.eclipse.org/aspectj/,基本语法还是比较简单的,但毕竟整合起来,因此虽然比较好用,但也不常见了

   区别:spring Aop采用的动态织入,而Aspectj是静态织入。静态织入:指在编译时期就织入,即:编译出来的class文件,字节码就已经被织入了。动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行。有不清楚的同学,可以自己补下基础的代理知识。


AOP的一些术语

    pointcut: 是一个(组)基于正则表达式的表达式,有点绕,就是说他本身是一个表达式,但是他是基于正则语法的。通常一个pointcut,会选取程序中的某些我们感兴趣的执行点,或者说是程序执行点的集合。"execution(public * cn.com.sinodata..*.*Controller.*(..))"

   joinPoint: 通过pointcut选取出来的集合中的具体的一个执行点,我们就叫JoinPoint.

   Advice: 在选取出来的JoinPoint上要执行的操作、逻辑。

   aspect: 就是我们关注点的模块化。这个关注点可能会横切多个对象和模块,事务管理是横切关注点的很好的例子。它是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域或方面。由pointcut 和  advice组成。

   Target:被aspectj横切的对象。我们所说的joinPoint就是Target的某一行,如方法开始执行的地方、方法类调用某个其他方法的代码。


 aspect一般放在处理AOP最上面,我们把需要处理的AOP业务放在这个类里面,pointcut 和  advice组成。 pointcut 用类似正则表达式选择需要进行AOP的集合,joinPoint是针对pointcut 具体执行的一个点。而Advice则是具体需要做什么,Advice的參數需要和pointcut的方法名一致。有四种类型。

1:before advice 在方法执行前执行。

2:after  returning  advice 在方法执行后返回一个结果后执行。

3:after  throwing advice 在方法执行过程中抛出异常的时候执行。

4:Around  advice 在方法执行前后和抛出异常时执行,相当于综合了以上三种通知。

一般Around  就行了。

0 0