gpt4 book ai didi

jsf - 在运行时获取所有初始化的@Named-beans 的列表

转载 作者:行者123 更新时间:2023-12-05 00:58:04 26 4
gpt4 key购买 nike

我用 javax.inject.Namedjavax.enterprise.context.*Scopedorg.omnifaces.cdi.ViewScoped定义我的 View bean 的生命范围。

现在我想获得所有实例化 bean 的列表。首先,我想到了this blog-entry涵盖了这个问题,但它只列出了 @ManagedBeans .

你知道如何列出它们吗?如果没有固定在 JavaEE 的实现甚至版本上,这可能吗?

亲切的问候,
六甲

PS:我已经找到org.omnifaces.cdi.BeanStorage ,但我不知道如何访问它的 map 。

最佳答案

鉴于您使用的是 OmniFaces,您可以使用 Beans#getActiveInstances() Beans utility class的方法获取给定 CDI 范围内的所有事件实例。

Map<Object, String> activeViewScopedBeans = Beans.getActiveInstances(ViewScoped.class);
// ...

键是 bean 实例,值是 bean 名称。

对于技术上感兴趣的人,这里是 concrete implementation这个实用方法的:
public static <S extends Annotation> Map<Object, String> getActiveInstances(BeanManager beanManager, Class<S> scope) {
Map<Object, String> activeInstances = new HashMap<>();
Set<Bean<?>> beans = beanManager.getBeans(Object.class);
Context context = beanManager.getContext(scope);

for (Bean<?> bean : beans) {
Object instance = context.get(bean);

if (instance != null) {
activeInstances.put(instance, bean.getName());
}
}

return Collections.unmodifiableMap(activeInstances);
}
BeanStorage仅供内部使用。而且,它没有被列入 showcase .

关于jsf - 在运行时获取所有初始化的@Named-beans 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33478927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com