Spring aop pointcut expression для доступа к типу возврата метода - PullRequest
8 голосов
/ 23 июня 2010

У меня есть сервисный интерфейс со многими методами, каждый из которых принимает объект Request и возвращает объект Response.Все объекты запроса имеют общего предка, а все объекты ответа имеют другого общего предка (который имеет флаг успеха и поле сообщения).

Теперь я хочу иметь аспект обхода, который проверяет разрешения и т. Д., Выполняет обслуживаниеВызовите и возвращает объект Response с кодом ошибки, если что-то не получается.Проблема в том, что мне нужно знать, какой тип объекта Response создать.Есть ли выражение pointcut, которое дает мне доступ к типу возвращаемого значения?Может быть, как-то так?

@Around(value = "execution(public *"
    + " com.mycompany.MyService+.*(..))"
    + " && args(request)"
    + " && returning( returnType)" // something like this would be nice

, argNames = "request,returnType")
public Object handleServiceCall(final ProceedingJoinPoint pjp,
    final Request request,
    final Class<? extends Response> returnType){ ... }

Ответы [ 2 ]

6 голосов
/ 23 июня 2010

В Javadoc для JoinPoint упоминается метод getSignature(), тип возвращаемого значения которого Signature имеет подчиненный интерфейс MethodSignature, в который можно попробовать выполнить приведение, к которому имеетсяметод getReturnType(), который может быть тем, что вы ищете.

0 голосов
/ 23 июня 2010

Вы можете сделать эту проверку в методе извещения об округе (handleServiceCall () в вашем случае)

...