Шов - список всех компонентов - PullRequest
3 голосов
/ 15 мая 2010

Я хотел бы получить список всех компонентов, чтобы я мог продолжить их обработку. Возможно ли это, если да, как я могу это сделать? Я не верю, что могу наблюдать за всеми событиями postCreate, поскольку это просто точное совпадение, а не регулярное выражение.

@ Observer ( "org.jboss.seam.postCreate.")

Вы можете наблюдать только эти события, а не *, как это показано на карте, где ключом является строка.

Есть идеи?

Walter

1 Ответ

3 голосов
/ 18 мая 2010

Как сказал

Я бы хотел получить список всех компонентов

Для каждого класса, объявленного как компонент , Seam создает определение компонента и прячет его в области применения . Соглашение об именах соответствует шаблону

  • <имя_компонента> .component

Так что вы можете использовать

/**
  * Metamodel class for component classes
  *
  * Similar to org.springframework.beans.factory.config.BeanDefinition used by Spring
  */ 
org.jboss.seam.Component

Context context = Contexts.getApplicationContext();
for (String name: context.getNames()) {
    Object object = context.get(name);
    if(object instanceof org.jboss.seam.Component) {
        Component component = (Component) object;

        System.out.println(component.getName());
        System.out.println(component.getType());
        System.out.println(component.getScope());
        System.out.println(component.getTimeout());
        System.out.println(component.isStartup());
        System.out.println(component.isSynchronize());
    }
}

Если вы хотите получить нужный компонент, вы можете использовать

Object object = Component.getInstance(component.getName());
...