В контексте JEE/CDI я обычно использую статическую функцию CDI, когда мне нужно статически получить управляемый компонент CDI из метода. Например:
Код: Выделить всё
MyBean myBean = CDI.current().select( MyBean.class ).get()
Однако, насколько я могу судить, другой эквивалентный способ добиться этого — использовать BeanManager:
Код: Выделить всё
BeanManger bm = new InitialContext().lookup( "java:comp/BeanManager" );
Bean bean = bm.resolve(bm.getBeans( MyBean.class ) );
CreationalContext context = bm.createCreationalContext(bean);
MyBean myBean = bm.getReference(bean, cls, context);
Итак, помимо того, что с использованием метода CDI.current() нужно писать значительно меньше кода, какие различия есть в его использовании? Казалось бы, возврат к использованию BeanManager — гораздо более сложная (и потенциально подверженная ошибкам?) методология. С функциональной точки зрения, есть ли какие-либо недостатки в использовании вместо этого метода CDI.current()? Работает ли CDI...select() только для bean-компонента @ApplicationScope? Или я могу использовать и другие bean-компоненты с ограниченной областью действия (например: @Dependent)?
Я помню, что читал что-то о потенциальных утечках памяти с использованием метода CDI, но не понимаю, как и почему это могло быть так.
Подробнее здесь:
https://stackoverflow.com/questions/530 ... onally-equ