首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未应用已定义的通知: Aspectj Pointcut

未应用已定义的通知: Aspectj Pointcut
EN

Stack Overflow用户
提问于 2014-10-15 09:05:09
回答 3查看 7.2K关注 0票数 3

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

代码语言:javascript
复制
(advice defined in com.test.util.log.Logger has not been applied
[Xlint:adviceDidNotMatch]).

切入点:

代码语言:javascript
复制
@Pointcut(value = "execution(* (@Loggable *).*(..))"))

注释:

代码语言:javascript
复制
@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;
}

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-15 10:06:57

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

代码语言:javascript
复制
@Pointcut("execution(* (@com.company.application.subpackage.Loggable *).*(..))"))

使用括号的方式使切入点只匹配由注释的@Loggable类的方法。注释的@Target定义表明,它也可以应用于方法和构造函数。这些将不会与您的切入点相匹配,为此您将不得不修改它。我希望你知道,我只是为了安全而提这件事。

票数 3
EN

Stack Overflow用户

发布于 2015-04-29 05:34:55

建议)意味着在编译的项目中没有应用您的切入点剪切。很可能您没有将注释放在任何方法上。

我还建议不要重新发明轮子,试试aspect4log

票数 0
EN

Stack Overflow用户

发布于 2019-10-28 05:57:47

代码语言:javascript
复制
before(): execution(* YourOwnPackage.*.*(..))
{
     //packages is com
    System.out.println(" TEST");    

}

以此作为开始,找到你自己的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26378562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档