@PostConstruct не вызывается в PhaseListener

Я использую jsf2.2 с wildfly 8.1 и javaee7.

Моя инъекция CDI-компонента в фазселистинер работает должным образом, но метод @PostConstuct никогда не вызывается

Я пытался аннотировать фазселистинатор с помощью @javax.enterprise.context.ApplicationScope, SessionScope и Dependent, но безрезультатно.

Помимо имен, это именно то, что я делаю в своей пост-конструкции.

//@ApplicationScope
//@SessionScope
//@Dependent
public class MyPhaseListener implements PhaseListener {

   @Inject
   @Any
   private Instance<MyOrderedUrlHandler> myOrderedUrlhandlers;
   private Map<String, List<MyOrderedUrlHandler> orderedUrlHandlersMap;

   @PostConstruct
   void mapOrderedUrlHandlers() {
      LOG.info("Executing postconstruct");
      orderedUrlHandlersMap = Maps.newHashMap();

      for(final MyOrderedUrlHandler urlhandler : myOrderedUrlhandlers) {
         final String handles = urlhandler.url();
         final List<MyOrderedUrlHandler> registeredHandlers = orderedUrlHandlersMap.get(handles);

         if(registeredHandlers == null) {
            registeredHandlers = Lists.newArraList();
         }
         registeredHandlers.add(urlHandler);
         orderedUrlHandlersMap.put(handles, registeredHandlers);
      }
   }
}

Метод уровня впрыска тоже отлично работает.

Это тот случай, когда обратный вызов @PostConstruct не является частью спецификаций jsf phaselistener?

1 ответ

Решение

Согласно разделу 5.4.1 спецификации JSF 2.2, PhaseListener не управляемый компонент, но его можно вводить.

Согласно разделу 5.4.2, управляемые bean-компоненты должны поддерживать аннотации жизненного цикла @PostConstruct а также @PreDestroy,

Так как PhaseListener не является управляемым компонентом в смысле JSF, из спецификации не следует, что реализация обработчика фазы должна поддерживать @PostConstruct,

Другие вопросы по тегам