AspectJ给人的感觉是很自然,就好象它填补了您的编程知识缺陷而不是在一个新方向上的扩展。
在AspectJ中,类型间方法声明看起来就像正常的方法声明,引用的技术也一样。
同时使用AspectJ和SpringAOP是可能的:它们并不冲突。
注意,本文将解释最近宣布的AspectJ和AspectWerkz项目合并的意义。
目前,虽然已经用这些工具创建了一些第三方库,但AspectJ和AspectWerkz不包括任何库。
由于AspectJ是Java语言语法和语义的扩展,所以它提供了自己的一套处理方面的关键字。
正如类是Java模块化的单元,方面是AspectJ模块化的附加单元。
AspectJ编译器是JDT编译器的扩展,所以完全能够编译Java代码。
目前,虽然还存在其他研究质量的编译器,但是AspectJ编译器是惟一达到商业质量的AOP编译器。
一个问题是要求AspectJ织入器能够解析对包含在被织入的jar中的第三方类的引用。
每个合法的Java程序都是合法的AspectJ程序,所以可以像以前那样编译代码。
有了AspectJ编译器,方面代码就可以得到Java代码从静态检查得到的全部好处。
AspectJ切入点表达式语言的强大不仅仅是关于复杂的结构。
本文假定您对AspectJ中的AOP有一般性的了解,并且不准备介绍AOP。
我们已经看到了AJDT如何通过增加编辑器标记和装饰advice元素来显示AspectJ的crosscutting特征。
根据表1,可以看出,从用户采用度的角度来说,AspectJ、AspectWerkz、JBossAOP和SpringAOP是领先的工具。
方法,那么AspectJ会替我处理这种情况,不需要做任何特别的工作。
AspectJ在编译时会带来开销,主要是内存和时间的使用,因为它是在编译时执行大部分通知。
利用@Profiled注解和AspectJ的加载时编织来决定哪些方法应该在部署时计时。
在AspectJ中,这些地方都称为pointcut,在pointcut处所执行的代码称为advice。
方面的下一部分使用了一些新的AspectJ5支持,以进行基于注释的类型匹配。
可以通过在项目上右击并选择Properties,然后进入AspectJInPath区域,将条目添加到项目的inpath中。
AspectJ是面向方面编程模型在Java平台上的一种实现(参见参考资料)。
这样,就可以通过普通的Java5编译器编译AspectJ应用程序,然后再由AspectJ编织器对其进行编织。
Ramnivas是AspectJ用户社团的活跃成员,从面向方面编程的早期阶段就进入这个领域了。
Composite模式在AspectJ中可使用内部类型声明实现,如上面关于配置的一节所述。
这个过程也是可逆的,也就是说,可以使用上下文菜单项来删除AspectJ性质并切换回Java编译器。
在AOP@Work系列的最后这篇文章中,我将介绍Contract4J,这是一个基于AspectJ的工具,支持契约式设计。