Суть в том, что перед вызовом бизнес-метода будет вызываться метод (или методы) определенных классов.
Все весьма и весьма просто.
1. Мы аннотируем бизнес-метод или бин вот так:
@Interceptors({LogDebugInterceptor.class, NotNullInterceptor.class})2. В самом перехватчике должен быть метод (методы) а ля
@AroundInvokeОни должны быть аннотированы и иметь указанную сигнатуру.
public Object methodName(InvocationContext inv) throws Exception
3. Очень интересен интерфейс
public interface InvocationContext {с помощью него можно получить объект и метод, которые послужил причиной вызова перехватчика. А так же все параметры, переданные в бизнес-метод. Более того, параметры можно подменить с помощью метода setParameters.
public Object getTarget();
public Method getMethod();
public Object[] getParameters();
public void setParameters(Object[] params);
public java.util.MapgetContextData();
public Object proceed() throws Exception;
}
4. Для успешного завершения необходимо венуть объект, возвращаемый функцией proceed()
return inv.proceed();тогда управление будет передано следующему перехватчику, либо бизнес-методу.
Суть схожа с механизмом фильтров в сервлетах. Для чего можно использовать перехватчики? для обработки входных параметров, их проверки, проверки каких-либо ограничений. Например бизнес-метод depositMoney(Customer customer) можно перехватывать для проверки прав клиента на перевод денег.
Комментариев нет:
Отправить комментарий