アドバイスで注釈値にアクセスしたいのですが、注釈は型またはメソッドに配置できます。これまでのところ、メソッドに適用すると注釈値を取得できますが、型に注釈を適用すると成功しません。
@Before( value = "(@annotation(varun.mis.aspect.Logged) || within(@varun.mis.aspect.Logged *)) && (@annotation(logged))",argNames = "logged" )
なにか提案を?
アドバイスで注釈値にアクセスしたいのですが、注釈は型またはメソッドに配置できます。これまでのところ、メソッドに適用すると注釈値を取得できますが、型に注釈を適用すると成功しません。
@Before( value = "(@annotation(varun.mis.aspect.Logged) || within(@varun.mis.aspect.Logged *)) && (@annotation(logged))",argNames = "logged" )
なにか提案を?
型に適用されたときに注釈を引数として取得できるとは思わない
次のポイントカット式
@Before("@annotation(com.some.TestAnnotation) || within(@com.some.TestAnnotation *)")
アノテーションが付けられたメソッドまたはアノテーションが付けられたクラスのいずれかに一致します。次に、アドバイスを宣言して、メソッドまたはクラスから注釈を取得できます
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
TestAnnotation annotation = methodSignature.getMethod().getAnnotation(TestAnnotation.class);
if (annotation == null) {
Class<?> clazz = methodSignature.getDeclaringType();
annotation = clazz.getAnnotation(TestAnnotation.class);
if (annotation == null) {
System.out.println("impossible");
} else {
System.out.println("class has it");
}
} else {
System.out.println("method has it");
}
メソッドと型の両方にアノテーションがある場合も考慮する必要があります。