问题标签 [aspectj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
14384 浏览

java - 我为 AspectJ 使用哪个 maven 插件?

我正在尝试将 aspectj 添加到使用 java 6.0 的 maven 项目中。浏览我发现了 2 个 maven 插件,没有一个能按我预期的方式工作。

第一个http://mojo.codehaus.org/aspectj-maven-plugin最初无法通过 netbeans 工作,因为我无法获得编译 5.0 或更高版本源的代码(它抱怨注释等)从命令尝试后行并比较执行的命令似乎它的 Maven 安装目标与插件和 java 5+ 代码不兼容,而编译目标工作正常。尽管有可能解决这个问题,但它很烦人,让我想到了一个问题:aspectj-maven-plugin 还在开发中吗?我还应该使用它吗?

第二个是 apaches 自己的,它似乎更活跃,更有可能工作。但是,我找不到任何完整的示例,也无法运行它。我不断收到来自 Maven 的异常:

jar 文件在那里,完好无损,我使用哪个版本的插件也没关系,它总是抛出相同的异常。关于问题可能是什么的任何想法?

简而言之,哪个插件以及我应该如何使用它?

谢谢

0 投票
1 回答
2719 浏览

java - AOP 或 APT 用于覆盖超类中的方法

我有一个大型检票口组件库,这些组件使用自定义注解@ReferencedResource或另一个注解进行注解@ReferencedResources,它有一个ReferencedResouce[] value()允许多个注解的参数。

这是一个示例代码片段:

到目前为止,我使用apt检查引用的资源是否确实存在。例如

js/behaviors/promoteSelectOptions.js除非可以在类路径中找到该文件,否则将导致编译失败。这部分工作得很好。

现在我也是 DRY 的粉丝,我想在创建对象时使用相同的注释将资源实际注入到对象中。使用 AspectJ,我已经实现了其中的一部分。

带注释的对象始终是ComponentAbstractBehavior的实例。

对于组件来说,事情很简单,只要在构造函数之后匹配即可。这是执行此操作的建议:

然而,对于行为,我需要将资源附加到响应,而不是行为本身。以下是我使用的切入点:

这是建议:

如果该类重写了renderHead(response)方法,这也很有效,但在许多情况下,这不是必需的,因为超类已经实现了基本功能,而子类只添加了一些配置。所以一种解决方案是让这些类定义这样的方法:

我会讨厌这个,因为这是死代码,但目前这是我看到的唯一可行的选择,所以我正在寻找其他解决方案。

编辑:

我已经使用 APT 和 sun javac 调用创建了一个可行的解决方案。但是,这会导致下一个问题:使用 maven 在同一个项目中运行 APT 和 AspectJ

无论如何,只要我有空闲时间,我就会发布这个问题(或部分问题)的答案。

0 投票
1 回答
3070 浏览

java - AspectJ,没有构造函数的通用切入点

我做了一个分析方法:

并将 tld.mycompany.business.aspects.SystemArchitecture 中的切入点定义为

我想分析我的服务层中不是构造函数和异常的所有方法(这样我就不会得到“不支持初始化周围(编译器限制)”和“不支持预初始化周围(编译器限制) “警告)并忽略我在几个中得到的 dataType()。

但是,我仍然收到有关构造函数和异常的警告。它似乎也为几乎所有的 Java 方法提供建议,因此调试我的应用程序几乎是不可能的,因为我为每一行都提供了许多建议。Eclipse 告诉我,仅 profileBusiness 行就有 2747 条建议。

显然我一定是误会了什么,但是什么?我如何才能使其成为 tld.mycompany.business 层次结构中以 Impl 结尾的类中的所有方法(构造函数除外)?

干杯

尼克

0 投票
2 回答
2248 浏览

java - APT 和 AOP 在同一个项目中,使用 Maven

我必须在同一个 Maven 项目中使用 Annotation Processing (apt) 和 AspectJ。

两者都为自己工作,但我需要根据 apt 创建的代码创建方面。所以我需要二进制编织(原始源文件由apt扩展)。如何在 Maven 项目中启用二进制编织?

我知道唯一的标准选项是使用weaveDependencies参数提供依赖项,但这很糟糕。还有其他方法吗?

好的,我可以使用Maven Antrun 插件嵌入AspectJ ant 任务,但我不想诉诸于此。

0 投票
2 回答
4269 浏览

java - AspectJ:如何获得切入点来建议位于其他项目中的类

这应该很简单。

问题
您如何在一个项目中获得切入点来建议另一个项目中的代码/类?


上下文
我正在 Eclipse 中使用两个项目。为了便于解释,我们称一个科学项目和另一个数学项目,并说科学项目依赖于数学项目,我正在同时开发这两个项目。数学项目是核心产品,在生产中,如果我不修改代码,生活会更轻松。

目前,我正在调试这两个项目之间的交互。为了帮助解决这个问题,我正在编写一个 Aspect(在科学项目中)以在数学代码(和科学代码)执行时记录关键信息。


示例
我按照以下方式运行一个简单的示例方面:


问题
问题是,无论我创建什么切入点,它都只建议来自科学项目的代码。没有任何课程org.math.example是横切的,根本没有!

我尝试通过转到并单击添加项目并选择数学项目将数学项目添加到科学项目的路径中。那没有用,但似乎我需要按照这些思路做一些事情。proect properties > AspectJ Build > Inpath

在此先感谢您的任何建议...

-g男性


编辑 1:
自从写这篇文章以来,我注意到该项目出现以下错误:

所以也许这是正确设置的并且错误更加微妙。顺便说一句,可以这么说,提到的课程来自“科学项目”。即使在我清理项目之后也会发生这种情况。我目前正在谷歌搜索这个错误......


编辑 2:我在此处的评论 #5
中找到了上述错误的解决方案

问题是 maven-aspectj-plugin 的 pom 文件声明了对 aspectjtools 版本 1.6.7 的依赖。因此,在配置插件时,必须修改临时依赖项。这是通过指定版本 1.6.9 而不是 1.6.7 来解决问题的 pom 文件的相关代码片段:

0 投票
1 回答
561 浏览

java - 如何将没有aspectj文件的roo项目打包到jar中

嗨,我正在使用 Spring Roo 创建访问数据库的服务,仅此而已。所以,当我尝试使用 eclipse 导出到 jar 时,jar 不包含一个 java 类,但这些文件:
Contact.class
Contact_Roo_Configurable.class
Contact_Roo_Entity.class
Contact_Roo_ToString.class
Contact_Roo_JavaBean.class
我知道这些是 AspectJ 文件,但为什么不编译成一个文件。

0 投票
2 回答
4269 浏览

spring - aop.xml 名称和位置?

有没有办法用 LTW 指定 aop.xml 文件的名称?或定义另一个名称和位置?我有几个我使用的软件模块,它们都使用具有不同设置的 META-INF/aop.xml。我将这些模块包含在一个 Web 应用程序中,然后这一切都取决于它是如何部署/解包的,使用哪个 aop.xml 文件。所以经过长时间的搜索,我发现并非所有的 LTW 编织都会发生纠正,因为它取决于 aop。使用了xml...

基本上我需要使用两个 aop.xml 文件,有点合并 aop.xml 文件的两个内容......

这个怎么做?埃德

0 投票
2 回答
1781 浏览

java - 方面j。在多个类中创建内部类型方法

如果我放:

我正在 CountryState 类中创建一个方法 find 。

有没有办法在多个类中创建一个方法?我是否需要为要创建的每个类重复代码?

我知道通过方面我可以让一个类从另一个类继承,但是这样做,我可以创建一个超类,因为 java 不接受多重继承。

0 投票
1 回答
4378 浏览

java - 编译时编织配置

我正在尝试将我的加载时间编织 aspectj 转换为编译时间编织。

所以我<context:load-time-weaver/>从我的 spring 配置中删除,并在我的pom.xml. 但我不知道如何将信息转换为META-INF/aop.xml.

我在那里有这样的东西:

0 投票
4 回答
2619 浏览

java - 在 Maven 中使用 AspectJ 方面编织生产类,仅用于测试执行

我有一个使用 Maven 构建的项目,需要向方法添加一些基本的性能跟踪。我决定为此使用 AspectJ。主要要求是将跟踪方面编织到生产类中,但仅适用于单元测试执行阶段

我能够在 Maven 中配置编织,但是在执行测试后,应用了方面的相同生产类转到打包战争。

这种情况看起来很常见,但我无法在网络上找到解决方案。