【发布时间】:2014-04-01 09:18:35
【问题描述】:
由于@ManagedBean(eager = true) 将被弃用,您如何创建急切的应用程序范围的cdi bean?
【问题讨论】:
由于@ManagedBean(eager = true) 将被弃用,您如何创建急切的应用程序范围的cdi bean?
【问题讨论】:
利用 CDI 扩展框架解决了这个问题:
创建限定符:
@Qualifier
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Eager {
}
使用观察者方法创建扩展实现:
public class EagerCDIExtension implements Extension {
public void afterDeploymentValidation(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
beanManager.getBeans(Object.class, new AnnotationLiteral<Eager>() {
}).parallelStream().filter(bean -> bean.getBeanClass().isAnnotationPresent(ApplicationScoped.class)).forEach(bean -> {
beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean)).toString();
});
}
}
创建:META-INF/services/javax.enterprise.inject.spi.Extension
在上面的文件中注册扩展实现类,即:
pypackage.EagerCDIExtension
【讨论】:
@Any 或@Eager。是真的吗?