gpt4 book ai didi

java - 用于排除注释的 AspectJ 切入点

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:36 30 4
gpt4 key购买 nike

我正在使用 Spring AOP 进行日志记录。我想创建一个适用于除具有特定注释的方法之外的所有方法的切入点,但我不知道如何去做。我所发现的只是如何包含带有注释的方法。

最佳答案

示例注释:

package de.scrum_master.app;

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

@Retention(RetentionPolicy.RUNTIME)
public @interface NoLogging {}

司机申请:

package de.scrum_master.app;

public class Application {
public static void main(String[] args) throws Exception {
foo();
bar();
zot();
baz();
}

@NoLogging public static void foo() {}
public static void bar() {}
@NoLogging public static void zot() {}
public static void baz() {}
}

原生 AspectJ 语法中的方面:

package de.scrum_master.aspect;

import de.scrum_master.app.NoLogging;

public aspect MyAspect {
before() : execution(* *(..)) && !@annotation(NoLogging) {
System.out.println(thisJoinPoint);
}
}

@AspectJ 语法中的方面(应该也适用于 Spring AOP):

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 MyAspectX {
@Before("execution(* *(..)) && !@annotation(de.scrum_master.app.NoLogging)")
public void logExceptAnnotated(JoinPoint thisJoinPoint) throws Throwable {
System.out.println(thisJoinPoint);
}
}

这两个方面是等效的,并产生以下输出:

execution(void de.scrum_master.app.Application.main(String[]))
execution(void de.scrum_master.app.Application.bar())
execution(void de.scrum_master.app.Application.baz())

关于java - 用于排除注释的 AspectJ 切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24447383/

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