@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
,