Есть три разумных подхода, которые я могу придумать.
Во-первых, то же самое, что предлагал @Nikos, всегда оставляйте перехватчик включенным и просто добавьте условную логику, основанную на конфигурации.
Второй подход требует расширения CDI, где вы отслеживаете AfterTypeDiscovery
событие . Это позволяет вам получить списки альтернатив, перехватчиков и декораторов. Эти списки являются изменяемыми, и как только вы их измените, контейнер должен принять во внимание значения изменений. Удаление перехватчика должно привести к отключению перехватчика.
Этот подход, опять же с расширением CDI, требует, чтобы вы отслеживали AnnotatedType
перехватчика, используя ProcessAnnotatedType
событие , и отключали его, используя метод veto()
. В качестве альтернативы, если вето не сокращает его, вы можете изменить AnnotatedType
и удалить / заменить привязку перехватчика (хотя такой подход звучит несколько «хакерски», поскольку вы заканчиваете перехватчиком без привязок).