在运行时获取JSF中所有托管Bean的列表
问题描述:
我想要获取JSF应用程序中所有托管bean的列表。在春天,我可以做点像context.getBeansOfType()。 JSF中有相应的方法吗?在运行时获取JSF中所有托管Bean的列表
我有一些@ManagedProperty
bean实现了一个接口。我希望得到这些适配器的列表并循环遍历它们,而不是明确调用每个bean以保持代码清洁。
谢谢
答
您可以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());
}
}
注:这是紧密结合钻嘴鱼科JSF实现和其他实现不起作用。
这是什么动机,或者只是好奇心? – 2013-03-19 14:38:25
@LuiggiMendoza我会更新这个问题来澄清 – dev 2013-03-19 15:02:25