В среде Java EE 6, CDI 1.1.x, Seam 3 и т.д. нам нужно найти все CDI beans текущего вида (@ViewScoped
). До сих пор я пытался использовать:
@Named
@ViewScoped
public class ViewHelper
{
@Inject
private BeanManager beanManager;
public doSomethingWithTheBeanInstances()
{
Set<Bean<?>> beans = this.getBeanManager().getBeans(
Object.class, new AnnotationLiteral<Any>(){}
);
// do something
...
}
}
Однако это возвращает все beans, которыми он управляет.
Мне нужно найти только те в рамках текущего представления и - это было бы идеально - только те, которые реализуют определенный интерфейс (унаследованный на нескольких уровнях иерархии).
Каким образом это сделать?
Обратите внимание, что поскольку CDI не имеет видимой области видимости, мы используем Seam 3, чтобы комментировать все наши объекты с видимым beans как:
@Named
@ViewScoped
public class ResultManagerColumnHandler extends BaseColumnHandler
{
....
}
Вышеприведенный пример - это поиск (@ViewScoped
- замена CDI по Seam 3).
Как это можно сделать?