3

注釈付きクラスのすべてのメソッドをログに記録する注釈を作成しようとしていますが、ポイントカットに問題があり、適用されません (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;
}

ありがとうございました

4

3 に答える 3

3

注釈は名前のない最上位パッケージではなく、のようなパッケージにあると思いcom.company.application.subpackageます。これが当てはまる場合は、注釈スタイルの @AspectJ で完全修飾パッケージ名を使用する必要があります。そこでインポートを使用できるため、ネイティブ構文では必要ありません。したがって、ポイントカットは次のようになります。

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

括弧を使用する方法により、ポイントカットはによって注釈が付けられたクラス@Loggableのメソッドのみに一致します。注釈の@Target定義は、メソッドとコンストラクターにも適用できると述べています。それらはポイントカットと一致しません。そのためには変更する必要があります。安全のために言及しているだけです。

于 2014-10-15T10:06:57.733 に答える
0

[Xlint:adviceDidNotMatch]) は、コンパイルされたプロジェクトでポイント カットが適用されなかったことを意味します。ほとんどの場合、アノテーションをどのメソッドにも配置していません。

PSまた、車輪を再発明せずに aspect4logを試すことをお勧めします

于 2015-04-29T05:34:55.230 に答える