@PostConstruct 未在 PhaseListener 中调用
@PostConstruct not invoked in PhaseListener
我将 jsf2.2 与 wildfly 8.1 和 javaee7 一起使用。
我在 phaselistener 中的 CDI bean 注入按预期工作,但从未调用 @PostConstuct 方法
我尝试用@javax.enterprise.context.ApplicationScope、SessionScope 和 Dependent 注释 phaselistener,但没有成功。
除了命名,这正是我在 post 构造中所做的事情。
//@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 规范的一部分吗?
根据 JSF 2.2 spec 的第 5.4.1 节,PhaseListener
不是托管 bean,但可以注入。
根据第 5.4.2 节,托管 beans 必须支持生命周期注释 @PostConstruct
和 @PreDestroy
。
由于 PhaseListener
不是 JSF 意义上的托管 bean,因此根据规范不遵循阶段侦听器实现必须支持 @PostConstruct
。
我将 jsf2.2 与 wildfly 8.1 和 javaee7 一起使用。
我在 phaselistener 中的 CDI bean 注入按预期工作,但从未调用 @PostConstuct 方法
我尝试用@javax.enterprise.context.ApplicationScope、SessionScope 和 Dependent 注释 phaselistener,但没有成功。
除了命名,这正是我在 post 构造中所做的事情。
//@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 规范的一部分吗?
根据 JSF 2.2 spec 的第 5.4.1 节,PhaseListener
不是托管 bean,但可以注入。
根据第 5.4.2 节,托管 beans 必须支持生命周期注释 @PostConstruct
和 @PreDestroy
。
由于 PhaseListener
不是 JSF 意义上的托管 bean,因此根据规范不遵循阶段侦听器实现必须支持 @PostConstruct
。