В контексте 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()
работает только для компонента @ApplicationScope
? Или я могу также использовать с другими компонентами (например: @Dependent
)?
Я помню, что читал что-то о возможной утечке памяти, используя метод CDI, но не понимаю, как и почему это может иметь место.