1

アドバイスで注釈値にアクセスしたいのですが、注釈は型またはメソッドに配置できます。これまでのところ、メソッドに適用すると注釈値を取得できますが、型に注釈を適用すると成功しません。

@Before( value = "(@annotation(varun.mis.aspect.Logged) || within(@varun.mis.aspect.Logged *)) && (@annotation(logged))",argNames = "logged" )

なにか提案を?

4

2 に答える 2

3

型に適用されたときに注釈を引数として取得できるとは思わない

次のポイントカット式

@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");
}

メソッドと型の両方にアノテーションがある場合も考慮する必要があります。

于 2013-10-14T19:35:28.660 に答える