2013-10-13 2 views
1

Я хочу получить доступ к моим значениям аннотации в консультации, моя аннотация может быть помещена по типу или методу. до сих пор я могу получить значение аннотации при применении по методу, но не удачу, когда аннотация применяется к типу.Значение аннотации в совете

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

Любое предложение?

ответ

2

Я не верю, что вы можете получить аннотацию в качестве аргумента при применении к типу

Следующая выражения срез точек

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

Вы должны также рассмотреть случай, когда оба метода и типа имеют аннотацию.

Смежные вопросы