当前位置: 代码迷 >> ASP >> AOP具体兑现-AspectJ(1)
  详细解决方案

AOP具体兑现-AspectJ(1)

热度:843   发布时间:2013-03-17 13:48:32.0
AOP具体实现--AspectJ(1)

      

      AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际上提供了非常广阔的发展的空间。笔者第一次接触AOP概念是在做分销资源系统中所接触的,但是那时只是对它的一个模糊认识,是通过学习动态代理来认识AOP详细可见笔者之前的文章说说动态代理.而通过对Spring的学习,AOP有了进一步的了解和认识.

 

       因为AOP是一个概念和规范,所以它需要有自己的实现,AspectJAOP的一个很悠久的实现,它能够和Java 配合起来使用。

 

        接下来需要对AspectJ中的几个重要的概念进行初步了解.

 

        Aspect Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些Pointcut 以及相应的 Advice

        Joint point:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point

        Pointcut:表示一组 jointpoint,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

         AdviceAdvice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 beforeafter around 来区别是在每个 joint point 之前、之后还是代替执行的代码。

        Weave:Advice应用到Target Object上的过程叫织入,spring支持动态织入.

        Target Object:Advice被应用的对象

        Proxy:SpringAOP类默认使用JDK的动态代理,它的代理是在运行时创建,也可以使用CGLIB代理

 

       上面关于AspectJ的概念单独的进行理解有些困难和乏味.下面通过一个图将上面的概念串下来,如下图.

计算机生成了可选文字:Pointcot(add*)对横切性关注点的具体实现称为Ad功ce,Ad训ce可以分为:BeforeAdVICeAfferAd训CeThr0WAd功CeWe8VeaddUSerSecurityHandler检查安全性AspectTargetobiectProXy!ntF0dUCtionCOnCeFn

 

上面提到SpringAOP类默认使用JDK的动态代理,它的代理是在运行时创建,也可以使用CGLIB代理,那么下面对JDK_AOP动态代理实现跟CGLIB的代理实现有差别进行对比和总结.

 

1、如果目标对象实现了接口,在默认情况下会采用JDK的动态代理实现AOP

2、如果目标对象实现了接口,也可以强制使用CGLIB生成代理实现AOP

3、如果目标对象没有实现接口,那么必须引入CGLIB,spring会在JDK的动态代理和CGLIB代理之间切换.

 

以上是对AOP的实现AspectJ的相关概念进行了解,接下来将同一个实例来演示如何在项目中运用AspectJ.