【发布时间】:2015-04-02 01:44:48
【问题描述】:
我正在将 jsf2.2 与 Wildfly 8.1 和 javaee7 一起使用。
phaselistener 中的 CDI bean 注入按预期工作,但从未调用过 @PostConstuct 方法
我尝试用 @javax.enterprise.context.ApplicationScope、SessionScope 和 Dependent 注释 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 规范的一部分?
【问题讨论】:
-
显示您的代码。你可能违反了
@PostConstruct的合同 -
如果你和一个显式的默认构造函数怎么办?
-
@Kukeltje 默认构造函数是什么意思?调用phaselistener,问题是没有调用'@PostConstruct'。在这种情况下,显式默认构造函数有什么帮助?
-
我看到它已经回答了。这只是一个猜测,因为我之前已经注意到(不知道何时何地)丢失的构造函数会阻止另一个带注释的方法正常工作。幸运的是,现在情况似乎并非如此
标签: jsf-2 cdi postconstruct phaselistener