Java 带有布尔参数的AspectJ Spring引导捕获方法

Java 带有布尔参数的AspectJ Spring引导捕获方法,java,spring,aop,spring-aop,Java,Spring,Aop,Spring Aop,我使用aspectj和spring boot。 我试图在调用methodboolean值时记录消息。 Aspect在总体上起作用,但我对捕获的表达肯定是错误的 它正在使用但有理由捕获每种方法: @Before("execution(* de.fhb..*(..))") 也可以仅使用一个参数进行捕捉 @Before("execution(* de.fhb..*(*))") 现在的问题是: @Before("execution(* de.fhb..*(boolean))"

我使用aspectj和spring boot。 我试图在调用methodboolean值时记录消息。 Aspect在总体上起作用,但我对捕获的表达肯定是错误的

它正在使用但有理由捕获每种方法:

    @Before("execution(* de.fhb..*(..))")
也可以仅使用一个参数进行捕捉

    @Before("execution(* de.fhb..*(*))")
现在的问题是:

    @Before("execution(* de.fhb..*(boolean))")

不起作用。有什么帮助吗?错误一定是在执行*de.fhb..*我想是我的错误

这里我的文件getter和setter是用lombok生成的:

pojo:

方面:

package de.fhb.aop;

import javax.inject.Named;

import lombok.extern.java.Log;

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

@Aspect
@Named
@Log
public class CleanCodeAspect {

    @Before("execution(* de.fhb..*(..))")
    public void checkStyleBooleanParameter() {

        log.warning("You used a method with only one boolean parameter. "
                + "Refactor it into 2 methods with True, False at the end.");
    }

}

您的语法是正确的,请在没有Lombok的情况下自行查看和测试。我认为问题在于Lombok干扰了AspectJ,可能与前面描述的类似,请通过链接了解更多细节。这可能是另一个问题,但这将是我的第一个赌注。

试试java.lang.boolean。我还怀疑创建setLiveTrue或setLiveFalse之类的方法是干净的代码。它的功能应该更像启用/禁用或显示/隐藏。但是那可能只是我。java.lang.boolean给了我一个错误:警告与org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression上的java.lang.boolean[Xlint:invalidabsolutionPename]类型名称不匹配,我从选择器/标志参数中获得了清晰的代码,这只是一个简单的示例,而不是标准日志记录,时间追踪。但是为了您的建议,我从我的pojo中删除了lombok,但它不适用于boolean。*干得好。我应该将链接发布到我的github回购吗?是的,请。我尝试使用原生AspectJ,而不是Spring。我通常不是Spring的用户。我在这里使用了标准示例。我将寻找不同的名称和组件是不是原因
package de.fhb.showcase;

@Getter @Setter
public class Show {

    private String name;
    private boolean live;

    public void makeShowLive(boolean value) {
        live = value;
    }
}
package de.fhb.aop;

import javax.inject.Named;

import lombok.extern.java.Log;

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

@Aspect
@Named
@Log
public class CleanCodeAspect {

    @Before("execution(* de.fhb..*(..))")
    public void checkStyleBooleanParameter() {

        log.warning("You used a method with only one boolean parameter. "
                + "Refactor it into 2 methods with True, False at the end.");
    }

}