您的位置:首页 > 编程语言 > ASP

Aspectj的一些知识

2016-02-18 16:02 597 查看

1、起源

  
 AspectJ项目起源于帕洛阿尔托(Palo Alto)研究中心(缩写为PARC)。该中心由Xerox集团资助,Gregor Kiczales领导,从1997年开始致力于AspectJ的开发,1998年第一次发布给外部用户,2001年发布1.0 release。为了推动AspectJ技术和社团的发展,PARC在2003年3月正式将AspectJ项目移交给了Eclipse组织。

2、AspectJ是个啥


   
AspectJ 是一个基于 Java 语言的 AOP 框架,提供了强大的 AOP 功能,其他很多 AOP 框架都借鉴或采纳其中的一些思想。AspectJ 是 Java 语言的一个 AOP 实现,其主要包括两个部分:第一个部分定义了如何表达、定义
AOP 编程中的语法规范,通过这套语言规范,我们可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点问题;另一个部分是工具部分,包括编译器、调试工具等。AspectJ 是最早、功能比较强大的 AOP 实现之一,对整套
AOP 机制都有较好的实现,很多其他语言的 AOP 实现,也借鉴或采纳了 AspectJ 中很多设计。在 Java 领域,AspectJ 中的很多语法结构基本上已成为 AOP 领域的标准。AspectJ会扫描源代码文件,找到符合aspectj自身语法的文件(对什么时候,在什么地方,做什么工作操作的定义文件,也就是对aspect的定义),对文件进行解析,然后修改目标类的代码,最终形成修改后的目标类的.class文件。因此,可以认为,aspectj是一种静态的AOP实现方式(因为编译器已经经aspect写入到目标类的class文件中)。

3、简单用法示例
1)业务类:Bank.java
class Bank


{


public float deposit(AccountInfo account, float money)


{


  // 验证account是否为合法用户


  // Begin Transaction


  // 增加account账户的钱数,返回账户里当前的钱数


  // End Transaction


}


public float withdraw(AccountInfo account, float money)


{


  // 验证account是否为合法用户


  // Begin Transaction


  // 减少account账户的钱数,返回取出的钱数


  // End Transaction


}


};

2)aspectj定义类:AuthAspect.java:
aspect AuthAspect


{


  pointcut bankMethods() : execution (* Bank.deposit(…)) || execution (* Bank. withdraw (…));


  Object around(): bankMethods()


  {


    // 验证account是否为合法用户


    return proceed();


  }


};

AspectJ编译器将做一下事情:
首先,AspectJ从文件列表里取出所有的文件名,然后读取这些文件,进行分析;
AspectJ发现一些文件含有aspect的定义,在这个例子里,就是AuthAspect;
AspectJ根据这些aspect代码生成规则,修改添加Bank文件。 AspectJ读取AuthAspect的定义,发现了一个pointcut--bankMethods();这个pointcut的定义是execution(* Bank.deposit(…)) || execution(* Bank. withdraw (…)),表示对Bank类的deposit和withdraw方法要执行拦截。 
AspectJ继续读取AuthAspect的定义,发现了一个around(),这在AspectJ中叫做Advice。Advice允许你在某个类的方法的调用之前或调用之后,加入另外的代码。代码中的around(),就是要加入的代码。这段代码要加在哪里呢?around()后面跟了一个pointcut--bankMethods()。根据这个pointcut,AspectJ会把这段代码加入到Bank.deposit和Bank.withdraw两个方法的执行的前后。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: