gpt4 book ai didi

java - 如何为该方法编写 AspectJ AOP 表达式?

转载 作者:行者123 更新时间:2023-12-01 12:15:14 25 4
gpt4 key购买 nike

我尝试了很多组合,但在执行以下方法之前无法调用回调

@SomeAnnotation(...)
@Override
public void someMethod(Serializable id) {

}

我尝试过很多类似的组合

@Before("execution(@com.full.name.of.SomeAnnotation  * com.full.name.of.Class.someMethod(java.io.Serializable))")
public void beforeMethod() {
System.out.println("I am here.");
}

如果我编写一个更通用的表达式,它会命中 beforeMethod 但我无法定位单个特定方法。我在这里缺少什么?

最佳答案

好吧,伙计们,让我证明一下切入点确实按照原发者 Haris Hasan 所写的那样工作。

示例注释:

package com.full.name.of;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {
int id();
String name();
}

使用注释的示例类:

package com.full.name.of;

import java.io.Serializable;

public class Class {
@SomeAnnotation(id = 1, name = "John Doe")
public void someMethod(Serializable s) {}

public static void main(String[] args) {
new Class().someMethod("x");
}
}

Haris Hasan 的精确切入点的示例方面:

package de.scrum_master.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class SampleAspect {
@Before("execution(@com.full.name.of.SomeAnnotation * com.full.name.of.Class.someMethod(java.io.Serializable))")
public void yetAnotherPointcut(JoinPoint thisJoinPoint) {
System.out.println(thisJoinPoint);
}
}

控制台输出:

execution(void com.full.name.of.Class.someMethod(Serializable))

按原样复制并粘贴所有内容,然后运行它。 Quod erat demostrandum。

关于java - 如何为该方法编写 AspectJ AOP 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com