2015-02-03 5 views
0

Я использую jsf2.2 с wildfly 8.1 и javaee7.@PostConstruct не вызван в PhaseListener

Мой CDI инъекции фасоли в phaselistener работает, как ожидалось, но метод @PostConstuct никогда не invocked

Я попытался аннотировать phaselistener с @ 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?

+0

Показать Ваш код. Возможно, вы нарушите контракт для '@ PostConstruct' – kolossus

+0

Что делать, если вы и явный конструктор по умолчанию? – Kukeltje

+0

@Kukeltje Что значит стандартный конструктор? Вызывается фазестильщик, проблема в том, что «@PostConstruct» не вызывается. Как в этом случае поможет явный конструктор по умолчанию? – maress

ответ

3

В соответствии с разделом 5.4.1 документа JSF 2.2 spec, PhaseListener не является управляемым компонентом, а является инъекционным.

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

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

+0

Хотя я принимаю это как ответ, кажется странным, что инъекция зависимостей поддерживается без поддержки события жизненного цикла. – maress