Я пишу один простой afterReturning
аннотация point-cut
. Но я хотел бы выполнить aop
тогда и только тогда, когда аргументы метода пройти определенные критерииSpring AOP Point cut validate Аннотация Подарок
@AfterReturning(value = "execution(* com.test.create(*))", returning = "entity")
public void createAdvice(final AbstractEntity entity) {
if (entity.getClass().isAnnotationPresent(MyAnnotation.class)) {
//do something
}
}
@AfterReturning(value = "execution(* com.test.create(*))", returning = "entityList")
public void createListAdvice(final List<AbstractEntity> entityList) {
BaseEntity entity = entityList.get(0);
if (entity.getClass().isAnnotationPresent(MyAnnotation.class)) {
//do something
}
}
@MyAnnoation
public class Entity{
String a;
String b;
}
Но дело в том, лишь немногие из моих классов сущностей будет иметь аннотаций MyAnnotation
. Я хочу вывести эту логику управления на point-cut
вместо проверки внутри метода.
Любая идея, как я могу выполнить эту проверку?
Другой вопрос: AfterReturning
Метод aop может возвращать значение. Что происходит с этим значением, которое возвращается методом?
@AfterReturning(value = "execution(* com.test.create(*))", returning = "entity")
public Object createAdvice(final AbstractEntity entity) {
if (entity.getClass().isAnnotationPresent(MyAnnotation.class)) {
//do something
}
return something; //what will happen to this object. how it will be handled
}
спасибо за документацию. Как работает 'inside', если возвращаемым значением является' List 'type? –
Reddy
@Reddy Возвращаемое значение (или его тип) не имеет значения. '@ in' относится к типу, указанному в рекомендуемом способе. Это то, что вы спрашиваете? –
, если вы посмотрите мое обновленное сообщение, в настоящее время мой код проверки выглядит примерно так, что не так хорошо. и я думаю, что «в пределах» цели отличается от того, что я смотрю на – Reddy