在 java 应用程序中使用方面 - 当 javac/ajc 时?

发布于 2024-12-05 14:57:13 字数 475 浏览 1 评论 0原文

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

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

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

以下是否可能:

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

这对于处理方面来说足够了吗? 或者应用程序的每个项目都需要使用 ajc 进行编译吗?

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

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

谢谢

I think about using AspectJ in an existing project.

I have several pure Java Eclipse projects and I like to create an AOP project.

I'm not quite sure about when ajc is needed and when optional. We use Ant (with javac) as our main build and I would like to avoid changing the build.

Is the following possible:

I have a AspectJ enabled Eclipse and create my aspect project. I create a jar from this and include this jar with the aspectj jar in the normal eclipse workspace with the other projects.
The build includes my aspect jar and the aspectj jar as dependency jars with javac.

Is this enough for working with the aspects ?
Or do every project of the application needs to be compiled with ajc ?

The main goal is to keep the current structure of Eclipse setup and build environment as as much as possible as it is now.

Or is this only possible with the annotation style ? (if so can someone link me some information about the weaver and how to do this at runtime ?)

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半夏半凉 2024-12-12 14:57:13

如果您想将自己的方面编织到代码库中,则必须使用 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 编译的输出目录作为 inpath,然后将结果放在同一目录中。

您还可以将一个罐子作为 iajc 的输入,并生成一个罐子,将所有东西编织在里面。

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

问候

If you want to weave your aspect into your codebase, you must use AJC. If you only use javac, even with the annotation, your code won't be weaved by your aspects.

That being said, you don't have to add a lot to your ant build.

something like that should do the job:

<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>

In fact, you just build like normal and you add a step with the iajc taking your output dir of the javac compile as the inpath and you put the result in the same directory.

You can also take a jar as input to iajc and produce a jar with all your stuff weaved inside.

Edit: Or you can use runtime weaving, if your app is a web application, it is not too bad. If not, i do not recommand runtime weaving, since each time you will start your app, it might be a lot longer to start. I don't have a lot of experience with runtime weaving, but you can check it out. I know you need a aop.xml to define your aspects.

Regards

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文