我试图创建一个注释来记录带注释的类中的所有方法,但我的切入点有问题,它没有应用(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;
}
谢谢
答案 0 :(得分:1)
我认为注释不在未命名的顶级包中,而是在com.company.application.subpackage
之类的包中。如果是这样,则需要在注释样式的@AspectJ中使用完全限定的包名称。在本机语法中,由于您可以在那里使用导入,因此不需要。因此切入点应该是:
@Pointcut("execution(* (@com.company.application.subpackage.Loggable *).*(..))"))
使用括号的方式使得切入点仅匹配由@Loggable
注释的 类 的方法。注释的@Target
定义表明它也可以应用于方法和构造函数。你的切入点不会匹配那些,你必须为此目的修改它。我希望你知道,我只是为了安全而提到它。
答案 1 :(得分:0)
[Xlint:adviceDidNotMatch])表示您的切入点未应用于已编译的项目中。很可能你没有将注释放在任何方法上。
PS我也建议不要重新发明轮子并尝试 aspect4log
答案 2 :(得分:0)
before(): execution(* YourOwnPackage.*.*(..))
{
//packages is com
System.out.println(" TEST");
}
以此为起点找到自己的建议。