有没有办法获得@ApplicationScoped的所有Seam 3组件类?
答案 0 :(得分:2)
在阅读16.5. The Bean interface
Weld documentation
class ApplicationScopedBeans {
@Inject BeanManager beanManager;
public Set<Bean<?>> getApplicationScopedBeans() {
Set<Bean<?>> allBeans = beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {});
Set<Bean<?>> result = new HashSet<Bean<?>>();
for(Bean<?> bean : allBeans) {
if(bean.getScope().equals(ApplicationScoped.class)) {
result.add(bean);
}
}
return result;
}
}
<强>更新强>
获取instance
的{{1}}:
Bean
更新2
以上所有内容都错过了CDI的全部观点:)
public Object getApplicationScopedInstance(Bean<?> bean) {
CreationalContext ctx = beanManager.createCreationalContext(bean);
Context appCtx = beanManager.getContext(ApplicationScoped.class);
return appCtx.get(bean, ctx);
}
答案 1 :(得分:1)
如果你想从applicationContext中的一个组件调用一个方法或者在其中使用一个字段,最好将它定义为生成器方法或字段并将其注入你想要的地方。
答案 2 :(得分:0)
您可以使用getApplicationContext()
获取上下文,然后使用getNames()
获取应用程序范围内所有内容的名称,然后使用get()
按名称检索它们
你想做什么?从那里你必须使用反射来使它们成为正确的类型..
Context appContext = Contexts.getApplicationContext();
String [] names = appContext.getNames();
//Do whatever with them..
for(String s : names){
Object x = appContext.get(name);
// do something.
}