【问题标题】:Using Aspects in a java application - when javac/ajc?在 java 应用程序中使用 Aspects - 当 javac/ajc 时?
【发布时间】:2011-09-17 17:26:15
【问题描述】:

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

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

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

以下是否可能:

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

这足以处理方面吗? 还是应用的每个项目都需要用ajc编译?

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

或者这只能通过注释样式实现? (如果是这样,有人可以链接我一些关于编织器的信息以及如何在运行时执行此操作吗?)

谢谢

【问题讨论】:

    标签: aop aspectj javac


    【解决方案1】:

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

    话虽如此,您不必在 ant 构建中添加太多内容。

    类似的东西应该可以完成这项工作:

    <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 编译的输出目录作为输入路径,并将结果放在同一目录中。

    您还可以将一个罐子作为 iajc 的输入,然后生成一个罐子,其中包含您所有的东西。

    编辑:或者你可以使用运行时编织,如果你的应用程序是一个 Web 应用程序,那还不错。如果没有,我不推荐运行时编织,因为每次启动应用程序时,启动时间可能会更长。我对运行时编织没有太多经验,但是您可以查看一下。我知道你需要一个 aop.xml 来定义你的方面。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多