В настоящее время мы переходим от JSF-ManagedBeans к CDI.К сожалению, в прошлом мы чрезмерно использовали EL-Resolver для получения статического доступа к сессионным компонентам, управляемым JSF.
Поскольку внедрение зависимостей CDI доступно не везде, я переписал существующий статический поиск, чтобы использовать BeanManager
(с использованием расширения припоя SEAM BeanManagerAware
).
Iterator<Bean<?>> iterator = beans.iterator();
Bean<T> bean = (Bean<T>) iterator.next(); // possible NPE, I know :)
CreationalContext<T> creationalContext = beanManager.createCreationalContext(bean);
T contextual = (T) beanManager.getReference(bean, type, creationalContext);
return contextual;
Кодработает и возвращает управляемый контейнером экземпляр нужного компонента. НО: методы, отмеченные @PostConstruct
, не вызываются с помощью getReference()
.Возможно, вы, ребята, знаете, как это сделать.Не удалось найти что-то, гуглящее проблему: - /
С наилучшими пожеланиями!