Мое окончательное намерение - иметь перехватчик, который вызывается для определенных методов, и применять проверку bean-компонентов на входах.
Мои бизнес-сервисы предоставляют возможности CRUD, и для этого у меня есть простая иерархия где я группирую методы CRUD в интерфейсах / абстрактных классах.
Когда я пытаюсь добавить перехватчик для некоторых из этих унаследованных методов CRUD, он не вызывается. Если я применяю то же самое ко всему классу бизнес-услуг, он вместо этого работает. Это неприемлемое решение, потому что оно будет работать для всех методов класса, а я хочу запустить его только для некоторых из них.
Почему это происходит?
Пример:
Бизнес-служба и место, где должен работать перехватчик, по методу create
@Stateless
public class UserManagementServiceImpl implements UserManagementService {
@Override
@Interceptors(SpecificationValidator.class)
public User create(UserSpec spec) { }
}
Перехватчик:
@Interceptor
public class SpecificationValidator {
@AroundInvoke
public Object aroundInvoke(InvocationContext ctx) throws Exception {
System.out.println("Intercepted: " + ctx.getMethod() );
return ctx.proceed();
}
}
Иерархия классов:
@Stateless
public class UserManagementServiceImpl implements UserManagementService {
...
}
public interface UserManagementService<User,UserSpec> extends ManagementService<D,S> {
}
public interface ManagementService<D,S> {
D create(S specification) throws AlreadyExistsException;
}
При такой настройке перехватчик не вызывается.
Если вместо этого я аннотирую свой последний бизнес-бин, вызывается перехватчик.
@Stateless
@Interceptors(SpecificationValidator.class)
public class UserManagementServiceImpl implements UserManagementService {
@Override
public User create(UserSpec spec) { }
ПРИМЕЧАНИЕ. Я также попытался определить аннотация привязки перехватчика. Результат тот же.
Заранее спасибо.