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

理解切入点并访问advice中的注释参数

师冥夜
2023-03-14

有人能帮我理解下面AspectJ中的切入点吗?

@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface DynamicValue {
String lookupName() default "";
}
com.package.sample;
Class SampleA{

@DynamicValue("Hello")
public String greet;

//getters & setters

}
@Aspect
@Configurable
@Component
public class DynamicValueAspect
{

@Pointcut("get(@com.sample.aspect.DynamicValue java.lang.String com.package.sample..*.*)")
public void isDynamicValue() {}

@Around("isDynamicValue()")
public void getLocalized(ProceedingJoinPoint pjp) throws Throwable {
    System.out.println("Annotation called");
//How can I access the parameter in annotation here 
//i.e "Hello" from the @DynamicValue("Hello")
}

共有1个答案

梅逸清
2023-03-14

按以下方式更改方法签名:

@Around("isDynamicValue()")
public void getLocalized(ProceedingJoinPoint pjp, DynamicValue dynamicValue) throws Throwable {
    System.out.println(dynamic.lookupName());
}

我不太明白你是否也有问题与切入点。下面是一个应该有效的例子

@Around("execution(@com.package.sample.DynamicValue * *(..)) && @annotation(dynamicValue)")
public void isDynamicValue() {}
 类似资料:
  • 假设我有这样一种方法: 是否有一个切入点表达式可以选择所有参数带有@CustomAnnotation注释的方法?如果是这样的话,有没有一种方法可以让我访问“value”参数?

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

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

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

  • 我试图在方法注释上创建一个Aeyj切入点,但我总是用不同的方法失败。我使用的是aspectj自动代理(我在Spring上下文中没有配置其他编织)。我的类如下所示: 所以我想知道为什么aspectj不会创建切入点。我设法使用执行(**(…)使其工作抛出一些exc)这对我来说很好,但我仍然想知道我做错了什么。 另外,由于是在接口中定义的,我指定了实现类的注释,有没有办法让它以这种方式工作?其他代理机制

  • 每当调用RESTendpoint时,我都需要记录。我正在尝试使用Spring AOP来做到这一点。 在其他事情中,我需要延长endpoint的名称。一、 我需要读出映射注释的值。 我想以通用的方式解决这个问题。即“给我映射的值,无论确切的映射是什么”。 所以我现在所做的基本上就是这个答案中提出的:https://stackoverflow.com/a/26945251/2995907 然后我将传递