为什么我不能在Managed Bean构造函数中使用Init属性?

时间:2013-06-12 17:56:16

标签: dependency-injection ejb managed-bean postconstruct

我有一个Managed Bean:

public class CategoriaManagedBean {
  @EJB
  private CategoriaBeanLocal categoriaBean;
  private Categoria categoria;
  private List<Categoria> menu;
}

在我的构造函数中,我尝试:

public CategoriaManagedBean() {
  menu = categoriaBean.findByIdCategoriaPadre(0);
}

但是我收到错误“无法创建类的实例”,为什么我不能在构造函数中初始化该属性?

我解决了问题:

@PostConstruct
public void init() {
  menu = categoriaBean.findByIdCategoriaPadre(0);
}

但我想知道原因,以及我是否在使用@PostConstruct

问候。

1 个答案:

答案 0 :(得分:2)

使用@PostConstruct是正确的方法。

在在ManagedBean上调用构造函数之后,注入了EJB。

这就是@PostConstruct注释的原因。

以下是the documentation的第一行:

  

PostConstruct注释用于在完成依赖注入以执行任何初始化之后需要执行的方法。