Я сделал, чтобы сервис взаимодействовал через интерфейс со многими методами, все из которых берут Запрос, возражают и возвращают объект Ответа. Все объекты запроса имеют общего предка, и все объекты ответа имеют другого общего предка (который имеет флаг успеха и поле сообщения).
Теперь я хочу иметь вокруг аспекта, который проверяет полномочия и т.д., выполняет служебный вызов и возвращает объект Ответа с кодом неисправности, если что-нибудь перестало работать. Проблема: Я должен знать, какому Ответу возражают для создания. Существует ли 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){ ... }
В Javadoc для JoinPoint
упоминается метод getSignature()
, возвращаемый тип которого Signature
имеет подинтерфейс MethodSignature
к которому вы можете попробовать применить метод getReturnType()
, который может быть тем, что вы ищете.
Вы можете сделать эту проверку внутри метода around advice (handleServiceCall() в вашем случае)
Object actuals = pjp.proceed();
if(actuals instanceof MyResponse){
//TO:DO: Your code here
}