在java应用程序中使用Aspects - 何时使用javac / ajc?

时间:2011-09-17 17:26:16

标签: aop aspectj javac

我考虑在现有项目中使用AspectJ。

我有几个纯Java Eclipse项目,我喜欢创建一个AOP项目。

我不太确定何时需要ajc以及何时可选。我们使用Ant(使用javac)作为我们的主要构建,我想避免更改构建。

以下是可能的:

我有一个AspectJ启用Eclipse并创建我的方面项目。我从这里创建了一个jar,并在正常的eclipse工作区中将其与aspectj jar一起包含在其他项目中。 构建包括我的方面jar和aspectj jar作为依赖jars与javac。

这对于处理这些方面是否足够? 或者是否需要使用ajc编译应用程序的每个项目?

主要目标是尽可能保持Eclipse设置和构建环境的当前结构。

或者这只能用注释样式吗? (如果是这样,有人可以链接我关于织工的一些信息以及如何在运行时这样做吗?)

谢谢

1 个答案:

答案 0 :(得分:1)

如果您想将自己的方面编织到代码库中,则必须使用AJC。如果您只使用javac,即使使用注释,您的代码也不会被您的方面编织。

话虽如此,你不必为你的蚂蚁构建添加很多东西。

这样的事情应该可以胜任:

<path id="ajclasspath">
    <path refid="classpath"/>
    <pathelement location="${scm.home}/ant_libs/aspectjrt.jar"/>
</path>
<iajc inpath="${classes.dir}" destDir="${classes.dir}" fork="true" maxmem="${aspectj.maxmem}">
    <argfiles refid="aspectj.argfiles.path"/>
    <classpath refid="ajclasspath"/>
</iajc>

实际上,你只需像普通的那样构建,然后使用iajc添加一个步骤,将javac编译的输出目录作为inpath,并将结果放在同一目录中。

你也可以把一个罐子当作iajc的输入,生成一个装有你所有东西的罐子。

编辑:或者您可以使用运行时编织,如果您的应用是一个Web应用程序,它也不是太糟糕。如果没有,我不建议运行时编织,因为每次启动应用程序时,启动可能会更长。我没有很多运行时编织的经验,但你可以检查一下。我知道你需要一个aop.xml来定义你的方面。

此致