Джакарта EE - перехватчики запускаются только при вызове в классе, но не в методах - PullRequest
0 голосов
/ 09 февраля 2020

Мое окончательное намерение - иметь перехватчик, который вызывается для определенных методов, и применять проверку 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) { } 

ПРИМЕЧАНИЕ. Я также попытался определить аннотация привязки перехватчика. Результат тот же.

Заранее спасибо.

...