gpt4 book ai didi

java - 如何配置aspectj忽略getter和setter

转载 作者:行者123 更新时间:2023-12-02 02:22:09 26 4
gpt4 key购买 nike

我有一个方面当前可以捕获我的包中的所有公共(public)方法执行。

我想修改它以排除 setter 和 getter,所以我尝试了,这些是我尝试过的变体:

这个可以工作,但显然对 setter 或 getter 没有任何作用。

@Around("execution(public * *(..)) && !within(com.walterjwhite.logging..*)")

这不会编译:

@Around("execution(public * *(..)) && !within(* set*(..))")

这可以编译,但不会阻止捕获 setter/getters:

@Around("execution(public * *(..)) && !execution(* set*(..))")

我也看到这篇文章作为引用,但这没有用。尝试编译方面时出现编译错误。

How can I exclude getters and setters in aspectJ?

最佳答案

第二个无法编译,因为 within()需要类型签名,而不是方法签名。您所指的答案完全错误,我不知道为什么它被接受。我刚刚写了a new one以纠正该错误信息。

你最后的尝试基本上是正确的,但只忽略了setter,而不是getters。试试这个:

驱动程序应用程序:

package de.scrum_master.app;

public class Application {
private int id;
private String name;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void doSomething() {
System.out.println("Doing something");
}

public static void main(String[] args) {
Application application = new Application();
application.setId(11);
application.setName("John Doe");
application.doSomething();
System.out.println(application.getId() + " - " + application.getName());
}
}

方面:

package de.scrum_master.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class MyAspect {
@Around("execution(public * *(..)) && !execution(void set*(*)) && !execution(!void get*())")
public Object myAdvice(ProceedingJoinPoint thisJoinPoint) throws Throwable {
System.out.println(thisJoinPoint);
return thisJoinPoint.proceed();
}
}

控制台日志:

execution(void de.scrum_master.app.Application.main(String[]))
execution(void de.scrum_master.app.Application.doSomething())
Doing something
11 - John Doe

请注意

  • 如果您有 boolean 值的 getter,例如 isActive()并且还想忽略它们,您必须将切入点扩展 && !execution(boolean is*()) .
  • 这些带有名称模式的切入点始终只是启发式的,因此请注意方法名称,例如 getaway , settleConflict , isolate 。他们也会被忽略。

关于java - 如何配置aspectj忽略getter和setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48358673/

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