繁体   English   中英

@PostConstruct未在PhaseListener中调用

[英]@PostConstruct not invoked in PhaseListener

我将jsf2.2与wildfly 8.1和javaee7一起使用。

我在相位侦听器中的CDI bean注入按预期方式工作,但从未调用@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规范的一部分吗?

根据JSF 2.2规范的 5.4.1节, PhaseListener不是托管Bean,而是可注入的。

根据5.4.2节,托管bean必须支持生命周期注释@PostConstruct@PreDestroy

由于从JSF的角度来讲, PhaseListener不是托管bean,因此它不符合规范,即相位监听器实现必须支持@PostConstruct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM