当前位置: 首页 > 知识库问答 >
问题:

带注释参数的Spring AOP切入点

胡嘉歆
2023-03-14

假设我有这样一种方法:

public void method(@CustomAnnotation("value") String argument)

是否有一个切入点表达式可以选择所有参数带有@CustomAnnotation注释的方法?如果是这样的话,有没有一种方法可以让我访问“value”参数?

共有3个答案

上官迪
2023-03-14

只是为了完成最后一个答案:

@Before(value="execution(* *(@CustomAnnotation (*), ..)) && args(input, ..)")
public void inspect(JoinPoint jp, Object input) {
        LOGGER.info(">>> inspecting "+input+" on "+jp.getTarget()+", "+jp.getSignature());
}

将匹配一个方法,其中(其中一个)方法的参数用自定义注释进行注释,例如:

service.doJob(@CustomAnnotation Pojo arg0, String arg1);

与…对比

@Before(value="execution(* *(@CustomAnnotation *, ..)) && args(input, ..)")
public void inspect(JoinPoint jp, Object input) {
            LOGGER.info(">>> inspecting "+input+" on "+jp.getTarget()+", "+jp.getSignature());
    }

这将匹配(其中一个)参数类用自定义注释注释的方法,例如:

service.doJob(AnnotatedPojo arg0, String arg1);

其中,pojo声明如下:

@CustomAnnotation
public class AnnotatedPojo {
}

所有的区别都在于切入点声明中的@CustomAnnoation(*)@CustomAnnoation*

薄腾
2023-03-14

匹配1。。N带注释的参数,无论其位置如何使用

编辑2020-12-3:来自@sgflt的简化版本

@Before("execution(* *(.., @CustomAnnotation (*), ..))")
public void advice(int arg1, @CustomAnnotation("val") Object arg2) { ... }
越伟泽
2023-03-14

在选择参数时:

@Before("execution(* *(@CustomAnnotation (*)))")
public void advice() {
System.out.println("hello");
}

裁判:http://forum.springsource.org/archive/index.php/t-61308.html

获取注释参数时:

MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Annotation[][] methodAnnotations = method.getParameterAnnotations();

将为您提供注释,您可以迭代这些注释,并使用instanceof查找绑定的注释。我知道这有点骇客,但这是目前唯一支持的方式。

 类似资料:
  • 问题内容: 如果满足以下条件,则需要创建一个与方法匹配的切入点的方面: 它用MyAnnotationForMethod注释 它的参数之一(可以有多个)用@MyAnnotationForParam注释(但也可以具有其他注释)。 方面类看起来像这样 注释方法 随着日食->警告:在poincut: 使用http://download.eclipse.org/tools/ajdt/35/update中的最

  • 问题内容: 我有两个注释,并且,如果我在方法周围有切入点,我该如何提取用注释的方法的参数? 例如: 问题答案: 我围绕着另一个不同但相似的问题的其他答案对解决方案进行了建模。 我必须遍历目标类的原因是因为被注释的类是接口的实现,因此返回null。

  • 假设我有一个注释,如下所示: 然后在Aspect中,我怎么可能想写两个切入点,一个用于所有用@DB操作(isRead操作=true)注释的方法,一个用于@DB操作(isRead操作=false)?

  • 我不在乎方法在哪个类(或包)中 注释参数的位置会有所不同。 我知道带注释的值只适用于特定类型 我的切入点实现需要如下内容: 对于值到底需要什么,以及如何将注释与其类型联系起来,我有点困惑。在这一点上,可能不值得列出我尝试过的事情! 更新:根据我在http://stackoverflow.com/questions/3565718/pointcut-matching-methods-with-ann

  • 问题内容: 我需要 在类中使用@X注释的方法或使用@X注释的方法的切入点 。我还 需要注释对象 。如果同时注释了类和方法,则 我更喜欢将方法注释作为参数 。 我尝试了以下操作,这将创建“不一致的绑定”警告。(为什么不将它们设置为null?) 下面创建“跨’||’的参数x的模糊绑定 在切入点”警告。(我认为这并不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将先前的尝试自然地分

  • 我在想一个一般的请求映射问题。在不选择任何特定MVC框架的情况下,将基于注释的请求映射与简单的参数检查器映射进行比较,哪一个更好? 假设我想创建一个web服务,它应该处理例如“添加”和“删除”操作。 使用注释,它看起来像这样: 使用参数,它将如下所示: 在第二个示例中,假设Operation对象是从JSON对象构建的。我们的想法是,我们只有一个通用的操作,它有一个类型参数,我们总是调用相同的请求(