在运行时获取JSF中所有托管Bean的列表

dev*_*dev 2 java java-ee jsf-2

我想获得JSF应用程序中所有托管bean的列表.在Spring中,我可以执行context.getBeansOfType()之类的操作.JSF中有相应的方法吗?

我有许多@ManagedProperty实现接口的bean.我想得到这些适配器的列表并循环遍历它们,而不是显式调用每个bean以保持代码清洁.

谢谢

par*_*lov 5

您可以使用包中的BeanManager类来执行此操作com.sun.faces.mgbean:

ApplicationAssociate application = ApplicationAssociate.getInstance(FacesContext.getCurrentInstance().getExternalContext());
BeanManager beanManager = application.getBeanManager();
Map<String, BeanBuilder> beanMap = beanManager.getRegisteredBeans();
Set<Entry<String, BeanBuilder>>beanEntries = beanMap.entrySet();

for (Entry<String, BeanBuilder> bean: beanEntries) {
  String beanName = bean.getKey();
  if (beanManager.isManaged(beanName)) {
    BeanBuilder builder = bean.getValue();
    System.out.println("Bean name: " + beanName);
    System.out.println("Bean class: " + builder.getBeanClass());
    System.out.println("Bean scope: " + builder.getScope());
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:这与Mojarra JSF实现紧密结合,不适用于其他实现.

  • 注意:这个答案假设您正在使用Mojarra并在编译时类路径中使用它.这在其他JSF实现中不起作用,也不能针对JSF API进行编译. (5认同)