我使用的是jsf2.2和通配符8.1和javaee7。
我在phaselistener中的CDI bean注入按预期工作,但@PostConstuct方法从未被调用。
我试着用@javax.enterprise.context.ApplicationScope、SessionScope对phaselistener进行注释,但是没有效果。
除了命名之外,这也是我在我的帖子构造中所做的事情。
//@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规范的一部分吗?
发布于 2015-02-03 16:46:42
根据JSF2.2规范的5.4.1节,PhaseListener不是托管bean,而是可注入的。
根据5.4.2节,托管bean必须支持生命周期注释@PostConstruct和@PreDestroy。
由于PhaseListener不是JSF意义上的托管bean,所以它不遵循特定的规范,即阶段侦听器实现必须支持@PostConstruct。
https://stackoverflow.com/questions/28289153
复制相似问题