При создании синтетического компонента с помощью BeanConfigurator, что необходимо для внедрения?
Я создаю синтетический боб через AfterBeanDiscovery#addBean()
метод.
Рассматриваемый класс Java имеет public void update(Foo foo)
метод в этом. Я хочу заставить это вести себя так, как если бы оно было написано так:
@Inject
public void update(@SomeQualifier Foo foo)
... но я не могу изменить исходный код. Другими словами, я хотел бы:
- Программно добавить
@Inject
к методу (или эквивалентному) - Программно добавить
@SomeQualifier
в качестве уточнения кFoo
параметр (или эквивалент) - Заставить контейнер создавать экземпляр этого синтетического компонента "нормальным" способом, т.е.
update
метод будет вызываться с введенным@SomeQualifier
-qualifiedFoo
в обычном режиме CDI
Что я должен сделать, чтобы указать контейнеру, используя API-интерфейс конфигуратора бина, что мне нужно Foo
параметр, чтобы быть @SomeQualifier
точка инжекции, такая, что когда контейнер создает мой синтетический компонент, значение foo
также будет введен правильно?
Просто звоню BeanConfigurator#addInjectionPoint(InjectionPoint)
не работает, даже когда я вручную создаю InjectionPoint
реализация в комплекте с @SomeQualifier
в возвращаемом значении от его getQualifiers()
метод.
я хотел бы использовать InjectionTargetFactory
но у меня нет ручки на Bean
что требует в своем createInjectionTarget(Bean)
метод, так как в конце концов я нахожусь в процессе создания боба в первую очередь.
Я могу обойти это, используя более громоздкие BeanManager#createBean(BeanAttributes, Type, InjectionTargetFactory)
метод, но это требует ручного создания BeanAttributes
реализация. Я надеялся, что смогу сделать все это программно через API конфигуратора бина.