ajdt插件安装后无效
面向方面的编程(AOP)可用于解决当今许多应用程序需求。 Eclipse Foundation的AspectJ是流行的AOP实现。 但是,对于初学者来说,使用该技术可能会令人生畏。 在AJDT项目负责人Matt Chapman的新文章中,展示了如何使用Eclipse AspectJ开发工具(AJDT)插件使AspectJ开发变得更容易。 有关AspectJ的更多信息,请参见InfoQ的AspectJ标签 。
如果您在不使用Eclipse AspectJ开发工具(AJDT)的情况下进行AspectJ开发,那么本文将向您展示您所缺少的内容。 即使您以前使用过AJDT,也可能会看到一些您不了解的功能。
越来越多的开发人员开始依赖现代IDE中提供的复杂功能。 尽管我们当中许多人无疑会记得使用Emacs或Vi进行编程(我敢打赌你们中的某些人仍然会这样做),但诸如内容辅助之类的一些开发人员功能必不可少-如果没有IDE就无法编写适度的应用程序,那么您显然是此控制空间生成的成员。
用诸如AspectJ之类的语言进行的面向方面的编程可以提供强大的功能和改进的模块化,但是如果没有合适的工具,它可能会降低可理解性。 您可以查看一些孤立的Java(tm)代码,并从某种程度上了解它的功能,但是使用AspectJ可能会应用一些建议,因此您可能看不到完整的图片。 对于某些诸如跟踪之类的横切关注点,可能无需意识到,但对于安全性或特定于领域的关注点,例如,它们可能是应用程序的核心部分。 因此,与OOP相比,对AOP具有复杂的IDE支持更加有益。
在整篇文章中,我们将探索AJDT的一些功能,以展示这些工具如何使您提高生产力并增加从AOP方法获得的收益。
编辑器中的横切
让我们从在普通编辑器中查看一些Java代码开始:
现在,将其与Eclipse Java编辑器进行比较:
除了语法上色外,主要区别在于编辑器左右两侧的标记。 右侧的小条带是概述标记,它指示整个源文件中的左侧标记发生的位置(可以选择它们导航到该位置)。 左侧标记是建议标记,表示特定的来源位置受之前 ( ), 之后 (
),或者围绕 (
)的建议。
在上面的屏幕截图中,我们可以看到paint()方法中的两行受事前建议的影响。 paint()方法本身的执行也受到建议的影响。 一般建议标记图标( )用于表示影响相同来源位置的建议类型的组合。
您可以将鼠标悬停在建议标记上以查看带有更多信息的工具提示,还可以右键单击它以查看“建议对象”菜单,该菜单可用于导航到建议定义。 对于上面的组合标记,“ Advise By”菜单中有两个条目,显示该方法受建议前后的影响,如下所示:
AspectJ编辑器
AspectJ是Java的扩展,Eclipse中的约定是将纯Java代码(甚至在AspectJ项目中)保留在.java文件中,并将.aj扩展名用于使用AspectJ特定结构的源代码。 例如,将在.aj文件中创建新的方面。 这意味着默认情况下,Java编辑器仍用于.java文件,而AspectJ编辑器仍用于.aj文件。 该编辑器是Java编辑器的扩展,因此也可以用于Java代码。
这是在编辑器中打开的一个方面:
AspectJ编辑器被设计为以与Java编辑器相同的方式来表现AspectJ代码。 例如,语法着色扩展到AspectJ关键字,例如执行 , 周围和进行 。 其他编辑器操作也以相同的方式工作,例如“组织导入”,“添加导入”和“格式化”。
控制空间进行救援
内容辅助的重要性(也称为代码完成)已在前面提到。 AspectJ编辑器在方面中定义的方法内以及建议块内(在语法上类似于方法)提供基于Java的完成。 例如,您可以根据建议参数完成操作:
在上面的位置按Control-Space会给出一个完成列表,包括本地变量location
,建议参数mon
和ticks
,特殊的AspectJ变量thisJointPoint
和thisJointPointStaticPart
,方面中的私有静态字段, monitorMap
以及从Object
继承的方法。
方面也可以代表另一个类声明字段和方法。 这些称为类型间声明,并且需要不同的内容辅助完成:
此处的封闭方面是代表Point类定义一个称为hasListeners的方法。 因此,在给定位置提供的完成是在Point类的上下文中,而不是在定义方面的上下文中。
AJDT还提供模板建议,因此您可以例如键入“ pc”并按Control-space插入用于切入点声明的模板:
红色的花魁的攻击
Java编辑器中的另一个不可估量的功能是在键入时使用红色波浪形下划线显示错误。 AspectJ编辑器在各方面的Java构造以及AspectJ特定的语法(尽管有一些限制)中也显示了相同的内容。 将鼠标悬停在红色下划线上会显示带有更多信息的工具提示:
轮廓图
Eclipse中的标准大纲视图显示了当前文档的结构。 方面的结构类似于类的结构。 节点的新类型包括方面,切入点,通知,类型间声明和声明语句,如下所示。 图标的变体用于指示可见性,并在建议的情况下指示是否对建议进行动态测试(即,在编译时无法确定确切的匹配项)。 方面还可以包含常规字段和方法。 与类一样,此结构会在您键入时填充(不需要在编辑器中保存),并且也可以通过在包资源管理器中展开源文件来看到。
咨询装潢师
每当在Eclipse视图中显示Java元素(例如字段或方法)时,它都会带有一个图标,以指示它是元素的类型以及它的可见性。 AJDT提供了一个附加的图像装饰器,以指示哪些元素受建议影响。 采取在元素左侧的小橙色三角形的形式,如下所示,建议使用main , foo和bar方法。
只要在Eclipse视图中显示Java元素,就使用此图像装饰器。 这包括Java浏览透视图的大纲视图,包浏览器和成员视图,以及AJDT提供的视图。
交叉引用视图
我们已经看到AJDT如何通过添加编辑器标记和修饰建议的元素来显示AspectJ的横切性质。 这些机制旨在与现有视图和编辑器一起使用,以无缝提供其他信息。 但是,它们是“低带宽”机制,不能总是提供足够详细的信息,例如,当多个建议块影响同一位置时,或者需要概述影响源文件的所有建议时。
这是“ 交叉引用”视图的出现(有时称为“ X-Ref”)。 当您开始使用AJDT时,它应该会自动打开,或者您可以通过Window> Show View> Other ...手动打开它,然后从AspectJ类别中选择它。 当然,您可以根据自己的喜好按给定的角度排列视图,但作为起点,请尝试将“交叉引用”视图放置在“轮廓”视图下方。 或者,如果仅使用快速就位轮廓视图(通常通过按Control-O),则可以从“导航”菜单或通过按Alt-Shift-P对“交叉引用”视图进行相同操作(所有短键绑定已经采取!)
名称“ Cross References”有点通用,因为视图是通用的,可以扩展为显示与在活动编辑器中选择的当前元素有关的任何信息。 在AJDT中,已对其进行配置以显示当前元素的横切关系。
回到前面的示例,在该示例中,我们看到了在VisualiserCanvas.java源文件中为编辑器添加的建议标记。 这些标记表示存在建议,并且可以使用上下文菜单显示更多信息,但这需要额外的操作,并且并不总是完整的故事。 这是交叉引用视图为paint方法显示的内容:
现在我们可以看到,一些建议之前和之后都建议使用paint
方法本身,并且建议使用该方法中的元素。 之前通知建议对Image.dispose()的方法调用, 另外一些之前建议则建议对Image构造函数的调用,所有这些都来自RenderingMonitorInfo方面。
将此视图合并到您的Java透视图中后,这些详细的横切信息总是一目了然。 该视图响应编辑器和大纲视图中的选择,因此默认情况下始终显示与当前元素有关的信息。 如果需要,视图工具栏上有一个按钮可以禁用此链接。 还有一个按钮显示整个文件的横切信息,而不仅仅是当前元素。
增量编译
使用复杂的IDE可以最大程度地提高生产率,其中之一就是减少了编辑,编译,运行和调试周期所需的时间。 Eclipse中的增量Java编译器非常擅长仅根据您的编辑重新编译所需的内容,以至于通过简单的更改,编译步骤通常会以如此快的速度发生,以至于几乎没有引起注意。 AJDT中使用的AspectJ编译器基于Eclipse Java编译器,因此也旨在提高效率。 AspectJ的横切性使该过程变得更加复杂,但是对类和方面的大多数简单更改仍将导致快速增量编译。 某些更改,例如切入点或内联的建议,将需要完整的构建。
@AspectJ
到目前为止,我们已经看到了代码样式方面,其中使用语言关键字(例如Aspect, pointcut和before)在.aj文件中声明了方面 。 AspectJ还支持声明的注释样式,称为@AspectJ样式,其中常规类和方法与Java 5注释结合使用。 例如,不是使用pointcut关键字,而是使用该切入点的名称创建方法,然后用@Before批注对其进行标记。 注释的值是一个字符串,它是主要的切入点表达式。
AJDT支持这种@AspectJ样式。 “交叉引用”视图仍显示横切关系,并且标记仍显示在编辑器中。 “ 添加导入”操作有助于使用AspectJ定义的注释,并且键入功能时显示错误会帮助使用基本语法,尽管这并不涵盖注释中使用的字符串的内容。 这是这种声明样式的一个缺点,但是在保存和编译源文件之后,至少会有任何错误用红色下划线和工具提示显示:
动手
将AJDT安装到Eclipse的最简单方法是定义一个更新站点 (通过“ 帮助”>“软件更新”>“查找并安装...” )。 有关适当的更新站点URL,请参见AJDT下载页面 。 有适用于最新Eclipse版本和Eclipse较早版本的AJDT发行版本,并且如果您想尝试最新功能或需要对最新Eclipse里程碑的支持,则经常发布发行版本。
您可以使用适当的向导或工具栏图标来创建新的AspectJ项目,或者可以通过在包资源管理器视图中右键单击该项目,然后从上下文菜单中选择AspectJ Tools> Convert to AspectJ Project来转换Java项目。 创建新的类和包等与Java项目相同,并且有一个New Aspect向导用于创建新方面。
内建范例
为了方便起见,AJDT捆绑了几个示例项目,以及一个简单的向导,可将它们导入到您的工作区中。 本文中的许多屏幕截图都是使用这些示例项目拍摄的。 只需按工具栏上的“ 新建”按钮,或选择“ 文件”>“新建”>“其他...” ,然后展开AspectJ类别。 可用的示例分为两个子类别。 首先, AspectJ示例包含编译器发行版中的示例项目,并在AspectJ编程指南的第3章中进行了讨论。 第二个子类别是AspectJ插件示例 。 这是最近的新增内容,旨在演示开发Eclipse插件时可以使用方面的某些方式。 从AJDT 1.4开始,此类别中只有一个示例。 在将来的版本中应添加更多内容。 当前的示例称为Progress Monitor Checker ,展示了如何使用方面来测试使用Eclipse进度监视器的插件是否遵循API要求的规则,并在Eclipse Corner文章中进行了描述。
结论
在本文中,我们已经了解了AspectJ编辑器如何提供复杂的功能来帮助开发方面,以及标记和“交叉引用”视图如何显示详细信息并支持应用程序横切结构的导航。 增量编译提高了开发过程的效率,并且当AspectJ编译器生成常规字节码时,仍可以使用Eclipse Java调试器(要在建议中设置断点,您需要关闭AspectJ编译器设置中的内联)。 AJDT还提供了本文范围之外的更多高级功能,包括用于加载时编织的启动配置,方面可视化透视图,横切比较工具,对开发和使用方面库的支持以及与支持AspectJ的开发有关的功能Eclipse插件。
如果您有任何疑问,请访问AJDT网站以查找更多信息,包括演示,新功能,下载以及有关AJDT新闻组的详细信息。 AJDT是一个开源Eclipse.org工具项目,并根据EPL的条款发布。
关于作者
Matt Chapman是英国IBM Hursley Lab的软件工程师。 他在Eclipse.org上领导AJDT项目,该项目开发了一个集成的开发环境,使开发人员能够从AOP中获得最大的收益。 他定期在EclipseCon和AOSD等会议上演讲。
Java和所有基于Java的商标和徽标是Sun Microsystems,Inc.在美国和/或其他国家或地区的商标或注册商标。
版权所有©2006 International Business Machines Corp.。
ajdt插件安装后无效