У меня есть некоторые компоненты, для которых в конкретных инъекциях я хочу добавить данный перехватчик.Как указать перехватчик во время инъекции
Я был наивным думать, там было что-то вроде @Interceptors
аннотаций, которые могли бы позволить мне писать
private @Interceptors(Logging.class, Connection.class) @Inject MyBean instance;
Unfortunatly, Weld documentation ясно заявляет обратное.
Итак, как я могу ввести перехваченную версию моего компонента? Возможно ли использование объекта экземпляра cdi?
EDIT
Хотя answser LightGuard является действительно актуальным, он не полностью answser мой вопрос, поэтому позвольте мне перефразировать.
Я хочу иметь аннотацию, которая вызывает какую-либо отправку события вызова метода. Для этого я создал CDI Interceptor
с его собственным перехватчиком перехватчика (скажем, перехватчик называется SenderInterceptor
, а привязка называется SenderBinding
). Теперь я хочу добавить квалификатор CDI (давайте назовем его SenderQualifier
), который при использовании для инъекций устанавливает SenderInterceptor
.
Чтобы быть более ясным, я хочу следующий код, чтобы использовать SenderInterceptor
/* calling any method of that bean should trigger an event */
private @Inject @SenderQualifier MyBean aBean;
в то время как это делает не
private @Inject MyBean aBean;
То, что я пытался до сих пор был
- обнаружения поля, требующие этих инъекций с использованием библиотеки отражений (работает)
- создайте с помощью припоя для шва
AnnotatedType
из класса bean (во время события BeforeBeanDiscovery) (тип создается, но на самом деле не отличается от исходного) и даетAnnotatedType
аннотацию привязки перехватчика. - создать с помощью шва припоя (снова) Бин из генерироваться
AnnotatedType
, и придавая ему необходимого квалификатор аннотацию
Все кажется worrk, за исключением того, что это оригинальный боб, который получает инъекцию.
Я мог бы, конечно, заменить оригинал на перехваченный, но есть случаи, когда такой перехват не требуется, поэтому мне нужно оставить как AnnotatedType
ссылкой на тот же конкретный тип. Я думал, что я сделал это в CDI, но, похоже, он не работает (поскольку оригинальный тип никогда не заменяется перехваченным).
Впервые я когда-либо слышал об этих проектах. +1 для этого и для того, как он может быть добавлен. Тем не менее, я предполагаю, что на самом деле я должен добавить типы рядом с существующим, вместо простого их замены. – Riduidel
Фактически, в моем случае 'AnnotatedTypeBuilder' должен использоваться в методе обработчика событий BeforeBeanDiscovery (поскольку' ProcessAnnotatedType' не разрешить добавление типа, но только замену типа). – Riduidel
Извините, @LightGuard, но я должен отметить ваш ответ как не отвечая. – Riduidel