@Profile(description="something")
でアノテーションが付けられたメソッドをインターセプトするためにaspectjを使用しています
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Profile {
public String description() default "";
}
@Around("com.merc.aop.ctw.aspect.PointcutDefinitions.logAnnotatedMethods(profile)")
public Object profile(ProceedingJoinPoint pjp, Profile profile) throws Throwable {
....
}
@Pointcut("@annotation(com.merc.annotations.Profile)")
protected void logAnnotatedMethods(Profile profile) {
}
しかし、AJCを使用してコンパイルしているときに、次のエラーメッセージが表示されます
formal unbound in pointcut
_@Pointcut("@annotation(com.merc.annotations.Profile)")
protected void logAnnotatedMethods(Profile profile) {
}
_
これは正しくありません。@annotation()
はパラメータタイプではなくパラメータ名を必要としています。
クラスがデバッグコードでコンパイルされている場合、ポイントカットパラメータはメソッドパラメータと同じ名前である必要があります。そうでない場合は、一意のパラメータタイプに依存するか、argNames
パラメータを使用してパラメータ名を明示的に書き出す必要があります。
_@Pointcut(value="@annotation(profile)",argNames="profile")
protected void logAnnotatedMethods(Profile arg) { }
_
参照:
私は遊んでいて、次のことがうまくいったことがわかりました
@Pointcut("@annotation(profile)")
protected void logAnnotatedMethods(Profile profile) {
}