问题标签 [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 投票
2 回答
37220 浏览

java - 与接口上的注释匹配的 Spring AOP 切入点

我有一个在 Java 6 / Spring 3 中实现的服务类,它需要一个注释来限制角色的访问。

我定义了一个名为RequiredPermission 的注释,它的值属性是一个或多个来自名为OperationType 的枚举的值:

我还有以下方面定义:

参数对象包含一个用户名,我想在允许访问该方法之前查找用户所需的角色。

当我将注释放在 MyServiceImpl 中的方法上时,一切正常,切入点匹配并且方面启动。但是,我相信注释是服务合同的一部分,应该与接口一起发布在单独的 API 包中. 显然,我不想将注释放在服务定义和实现(DRY)上。

我知道在 Spring AOP 中有一些情况是由注释一个接口方法(例如事务)触发的。这里是否有特殊的语法,或者开箱即用是不可能的。

PS:我没有发布我的弹簧配置,因为它似乎工作得很好。不,这些既不是我原来的类也不是方法名。

PPS:实际上,这是我的 spring 配置的相关部分:

0 投票
2 回答
477 浏览

java - 定义切入点以捕获接口但不捕获父或子接口

我想知道如何在 aspecJ 中定义一个切入点,该切入点捕获接口的任何方法,但不捕获任何父接口或子接口的方法。

我想要一个只捕获methodB() 而不是methodA() 或methodC() 的切入点。有什么方法可以在不列出切入点中的所有子接口和超级接口的情况下以一般方式执行此操作?

0 投票
3 回答
2999 浏览

java - 实体方面(在 Spring 中)

我在定义我的方面时遇到了一些问题。我有一堆实体,我想在其中分析 get 方法,所以我编写了以下切入点和方法

我已经在我的配置中打开了编织,并且将方面编织到业务层中工作得很好。我的切入点写对了吗?或者是否有一些关于实体的东西使它们不可编织?(我的实体在类定义之前以 @Entity 为前缀)

干杯

尼克

0 投票
1 回答
318 浏览

java - 具有简单类型的 AspectJ 连接点

我可以捕捉到算术中定义的连接点吗?

就像是:

我可以制作一个pointcut捕捉其中任何一条的线吗?我能得到什么背景?

我想before()在类的特定方法中完成的所有 int/float/double 操作中添加一个,这可能吗?

我在AspectJ 文档中看到为对象初始化和方法调用定义了连接点。是在声明一个int对象初始化并且+操作符算作方法调用吗?

谢谢!

0 投票
2 回答
1226 浏览

java - 如果 AspectJ 中有多个按钮,如何捕获按钮单击?

我想知道如果有多个按钮,我们是否可以捕获单击了哪个按钮。

在这个例子中,我们可以使用 joinPoints 达到 //do something1 和 //do something2 部分吗?

}

0 投票
1 回答
219 浏览

java - 编译如何与 AOP 一起工作?

我需要快速回答 AOP 中的一个简单问题。

如果我在客户端部署了一个代码并且我已经编写了新的方面,我想要在客户端软件中。我必须用“原始”代码和新的“AOP”代码“重新编译”完整的软件吗?(使用 aop 编译器)?

即我需要原始程序的源代码和新AOP的源代码并编译它们吗?

PS:我问的是笼统的,不是针对任何语言的。但是,如果答案必须是特定于语言的,那么假设 Java 和 AspectJ 作为 AOP 框架。

0 投票
3 回答
10423 浏览

java - 将代码插入方法 - Java

有没有办法自动将代码插入方法?

我有以下带有 getter 和 setter 的典型字段,我想将指示的代码插入到记录该字段是否被修改的 setter 方法中,以插入指示的“isFirstNameModified”字段以跟踪该字段是否被修改或不是。

我也不确定是否可以将方法名称的子集作为方法本身内部的字符串,如我将 fieldName 作为字符串添加到更新字段集中的行中所示:updatedFields.add("firstName");。而且我不确定如何将字段插入到一个类中,在该类中我添加了一个布尔字段来跟踪该字段是否已被修改(为了提高效率以防止不得不操作 Set):boolean isFirstNameChanged = false;

最明显的答案似乎是在 Eclipse 中使用代码模板,但我担心以后必须返回并更改代码。

编辑:::::::::

我应该使用这个更简单的代码而不是上面的示例。它所做的只是将字段名称作为字符串添加到集合中。

}

0 投票
3 回答
1952 浏览

java - 将 AOP 与 OSGI 结合使用的最佳解决方案?

我正在使用 Equinox,因此 Equinox Aspect 项目似乎很容易,但该项目似乎处于非活动状态,并且只有一页文档让我挂在最后。

除了那个项目,我没有看到很多在 OSGI 中使用 AOP 的选项。让我知道你们的想法和可能性是什么,谢谢:)

0 投票
2 回答
3695 浏览

java - 使用方法调用切入点在 Spring 中进行 AspectJ 加载时编织?

我正在按照此处所述在 Spring 中尝试 AspectJ Load-time Weaving 。我已经检查了示例代码,它可以像宣传的那样工作。

但是,当我尝试将PerformanceAdvice的切入点从语义execution(..)更改为时call(..),建议不再执行。

我知道 Spring AOP 不支持call(..)语义,但这不应该适用于这里,因为我使用的是 AspectJ LTW(示例代码成功地与非 Spring 管理的对象一起使用)。

任何人都可以解释一下吗?

更新: 为了确认 LTW 有效,我在 pom.xml 的 argline 配置中添加了以下系统属性:

  • -Dorg.aspectj.weaver.showWeaveInfo=true
  • -Daj.weaving.verbose=true
  • -Dorg.aspectj.tracing.enabled=true
  • -Dorg.aspectj.tracing.factory=default
  • -Dorg.aspectj.tracing.file=/tmp/aspectj-trace.txt

现在运行的输出mvn test包含以下几行:

p>

所以看起来 AspectJ 已经拿起了 PerformanceAdvice 并找到了 2 个连接点来编织它。但是如果我在 PerformanceAdvice 的连接点中替换execution(..)call(..)并再次运行 maven,输出不包含最后两行,并且建议不是执行。AspectJ 跟踪包含许多日志语句,但我无法理解它。我扫描了它是否有错误或警告,但没有发现。

(我假设我应该能够简单地替换execution(..)为,call(..)因为它们的语法分别在AspectJ 编程指南中进行了描述)。execution(MethodPattern)call(MethodPattern)

我还尝试使用更新版本的 AspectJ (1.6.6),但无济于事。

0 投票
1 回答
6343 浏览

intellij-idea - IntelliJ 中的 aspectJ

我想在 intelliJ 中使用 aspectJ 编写简单的示例。而且……我不能。

我找不到任何教程一步一步地显示我应该做什么和如何做。

我找不到任何工作代码的例子。

有人可以帮我弄这个吗?任何链接,或简单的方法?一门课,一门课。

intellij 9.0.2,带有 aspectj weaver 2.05