问题标签 [pointcut]

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 投票
1 回答
1432 浏览

java - 切入点中的抽象类型

我想用Aspect拦截具有特定签名的方法调用。

我的切入点应该是这样的:

execution(public Result * (Input))"

但是Result并且Inputabstract

这个切入点是否也匹配所有返回子类型Result并使用子类型的方法Input?因为那是我的意图。

0 投票
0 回答
479 浏览

spring - Spring AOP 建议 - 在调试模式下有条件

我只想在调试模式下使用 AOP 建议/切入点等(作为主全局配置:例如,当 log4j 处于调试阈值时)。

如何在 application.xml 配置或其他地方执行此操作?

我正在使用 AOP 注释,例如

@Around("PointCuts.anyCustomPublicMethod()")

如何添加到建议中,例如,

debug.equals(TRUE)

有人告诉我使用 Spring Expression Language,但我不知道该怎么做。

0 投票
2 回答
5746 浏览

spring - 两个同名但参数不同的方法的两个切入点

嘿。

我正在写一个@Aspect 来记录我的持久层。

首先是一些可能向有经验的开发人员显示错误的代码;)

这里的方面:

如果我只有一个切入点(及其方法)它可以工作,但如果我添加第二个,我会得到以下异常:

我改变了切入点的顺序,它总是排在第二个。关于如何解决这个问题的任何想法?

更新
一旦我发布了问题,我就有了一个想法。我改变了这样的切入点:

现在异常消失了,但还有一个小问题(我猜这更容易解决):由于 ArrayList 实现了 Serializable 两个切入点都被执行,至少在我使用 ArrayList 的测试用例中。
我将对此进行调查并发布我的发现,但也很感谢您的帮助;)

更新 2

更正了 kriegaex 声明的复制粘贴错误。谢谢!

logSave(..) 方法的返回类型是 Object。

更新 3

我将代码更改为仅使用一个切入点和一种方法,并使用 kriegaex 提议的 instanceof 进行检查。

我仍然想知道为什么它不能以另一种方式工作。

0 投票
2 回答
2329 浏览

aop - 如何在另一个 AspectJ 方面拦截proceed()?

我的情况如下:我有LoggingAspect几个切入点与我的主应用程序中的特定方法执行相匹配。对应的advice body基本都长得差不多,造成了很多代码重复:

不过,有一些变化。有时切入点和建议有一个argorthis参数,该参数也打印到日志中。有时,如果“完成”消息只是一个小调用,没有包含很多其他调用,则不会打印出来,如下所示:

不变的是我手动告诉记录器

  • 在打印第一条消息后增加缩进级别,即直接在proceed()调用之前,以及
  • 在打印最终消息(如果有的话)之前降低缩进级别,即直接在proceed()返回之后。

我的想法是,我想编写一个带有切入点的元方面(或称其为辅助方面),该切入点拦截proceed()调用,LoggingAspect以便相应地自动调整缩进级别。但似乎没有切入点匹配proceed()。我已经尝试过call(SomeMethodInMyMainApp),甚至是匹配日志方面所有内容的切入点,但切入点匹配我不需要的任何内容,但永远不会继续。

如果有人知道我该怎么做,我将不胜感激提示或代码片段。

这样做的一种间接方法可能不是拦截建议本身,而是通过创建一个额外的切入点来拦截这些建议所建议的方法调用(或执行),如下所示:

不过,我更喜欢另一种方式,而不必记住catchAll()每次更改日志记录方面的某些内容时都更新额外的切入点。

0 投票
3 回答
6872 浏览

constructor - 如何定义一个aspectj切入点来挑选具有特定注释的类的所有构造函数?

这是注释:

这是一个带注释的类:

这是第二个带注释的类:

我正在寻找一个 aspectj 切入点,该切入点正确匹配 ClassA 和 ClassB 的构造函数,而不匹配任何其他未注释的类的任何其他构造函数MyAnnotation

0 投票
1 回答
388 浏览

java - 当切点在超类上但派生类覆盖时,如何避免两次命中切入点?

很难为此制定一个简洁的标题。

无论如何,想象一下我有一个父类:

我有一个派生类,它覆盖了 getDimensions 方法:

当我创建一个切入点 on 的切面时,Shape.getDimensions切入点在被调用时被击中两次Circle.getDimensions:一次 for Circle.getDimensions,然后一次调用super.getDimensions.

切入点如下所示:@Pointcut("execution(* Shape.getDimensions(..))")

我在建议中添加了一个 hack 来检查声明类型的名称(使用JoinPoint.getSignature().getDeclaringType().getName()),但我觉得它相当粗糙,感觉有点像 hack。我认为必须有更好的方法来做到这一点。

有没有?

如果格式不是很好,请道歉。第一次在这里提问(我通常可以找到答案)。

0 投票
10 回答
41300 浏览

java - AspectJ 表达式在切入点错误中给出正式的未绑定

我在aspectJ中有这样的表达:

Spring 3.0启动时,我收到以下错误

0 投票
2 回答
448 浏览

spring - AspectJ 表达式'@within' 不会影响没有公共成员的具体类

这是我的示例类:

方面定义:

我发现 DefaultAgent 的实例没有被代理!

试行如下:

建议我可以找到类似“DefaultAgent$$EnhancerByCGLIB$$ae10cb14”的东西,但仍然是“DefaultAgent”。

然后我发现如果我将一个公共方法添加到类'DefaultAgent'中它会起作用。

进一步挖掘我发现根本原因在于 aspectj weaver:

org.aspectj.weaver.patterns.WithinAnnotationPointcut.matchInternal(阴影)

是aspectj weaver的bug吗?我该如何解决它,因为我在实际业务中有许多具体的子类,并且它是模式“模板”的标准实现。

0 投票
3 回答
1575 浏览

aspectj - 如何使用 AspectJ 修改返回对象的属性?

我有一个如下所示的类(来自 Spring Roo DataOnDemand),它返回一个新的瞬态(非持久)对象以用于单元测试。这是我们从 Spring Roo 的 ITD 中推入后代码的样子。

我需要做的是对返回的对象引用进行额外调用,以设置 Spring Roo 的自动生成方法无法处理的其他字段。因此,在不修改上述代码(或从 Roo 的 ITD 中推入)的情况下,我想再打一个电话:

为此,我声明了一个新的方面,它具有正确的切入点,并且将建议具体的方法。

现在,根据 Eclipse,切入点已正确编写并建议正确的方法。但它似乎并没有发生,因为持久化对象的集成测试仍然失败,因为 name 属性是必需的,但没有被设置。根据 Manning 的 AspectJ in Action(第 4.3.2 节),after 建议应该能够修改返回值。但也许我需要做一个 around() 建议?

0 投票
1 回答
319 浏览

java - Aspectj 匹配切入点,同时不关心方法级注释参数

我遇到了一个涉及 Aspectj 的问题。我要做的是对带有方法级注释的调用进行“after() throwing”匹配。

如果我使用

它可以工作,但是如果我在注释中添加了一些参数,那么它们就不会匹配。

我的切入点缺少什么?

只是为了澄清,我想匹配这两个例子,我也不关心注释中的参数。

AspectJ 1.6 版本