maven - 未应用定义的建议 : Aspectj Pointcut

标签 maven aop aspectj pointcut aspectj-maven-plugin

我正在尝试创建一个注释来记录带注释的类中的所有方法,但是我的切入点有问题,它没有应用(AspectJ 版本 1.7.4,aspectj-maven-plugin 版本 1.7)。

(advice defined in com.test.util.log.Logger has not been applied
[Xlint:adviceDidNotMatch]).

切入点:

@Pointcut(value = "execution(* (@Loggable *).*(..))"))

注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE })
public @interface Loggable {
    public enum Level {
        TRACE, DEBUG, INFO, WARN, ERROR, FATAL
    };

    boolean entry() default true;
    boolean exit() default true;
    String prefix() default "";
    String suffix() default "";
    Level level() default Level.DEBUG;
}

谢谢

最佳答案

我假设注释不在未命名的顶级包中,而是在像 com.company.application.subpackage 这样的包中。如果这是真的,您需要在注释样式的@AspectJ 中使用完全限定的包名称。在 native 语法中,这不是必需的,因为您可以在那里使用导入。所以切入点应该是:

@Pointcut("execution(* (@com.company.application.subpackage.Loggable *).*(..))"))

您使用括号的方式使切入点仅匹配 classes@Loggable 注释的方法。注释的 @Target 定义表明它也可以应用于方法和构造函数。这些不会与您的切入点匹配,您必须为此目的修改它。我希望你知道这一点,我只是为了安全起见才提到它。

关于maven - 未应用定义的建议 : Aspectj Pointcut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26378562/

相关文章:

java - 使用 maven 和 eclipse 与 OSGi 合并 2 个项目

java - 如何将注释值发送到 @Before 方法中?

java - 如何使用 AOP 在参数上拦截 super 中的方法调用?

java - 在 Aspect 中访问 HttpServletRequest 对象。提到的两种解决方案之间,哪一个是更好的解决方案

Spring 方面由 AspectJ 编译器编织,可在 Maven 中工作,但不能在 IntelliJ IDEA 中工作

java - 在没有 src/main/java 的情况下使用 Maven

java - TestNg:在使用 Maven 执行测试时获取 ArrayIndexOutOfBoundsException:0

java - Spring 中完整的 AspectJ 支持

java - 禁用特定项目的 Maven 构建

hibernate - 如何配置 Spring Boot 应用程序以使用 aspectj 事务?