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

标签 dependency-injection ejb managed-bean postconstruct

我有一个托管 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 配合得很好

问候。

最佳答案

使用@PostConstruct才是正确的做法。

在 ManagedBean 上调用构造函数之后注入(inject) EJB。

这就是为什么有 @PostConstruct注释。

这是 the documentation 的第一行:

The PostConstruct annotation is used on a method that needs to be executed after dependency injection is done to perform any initialization.

关于dependency-injection - 为什么我不能在 Managed Bean 构造函数中使用 Init 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072130/

相关文章:

jboss - 非法状态异常 : No EJB receiver available for handling

jsf - 如何在 JSF 支持 bean 之间共享一个实体?

java - JSF ajax 和自定义转换器

c# - 通过依赖注入(inject)在主窗体中初始化接口(interface)

dependency-injection - Symfony 2 依赖注入(inject)到实体函数中

java - Spring Autowiring 对象在postcontruct方法中为空

android - Dagger:如何提供参数化基类型的具体实现?

java - Java中字符串相等性比较失败

ejb - EJB 中的 @Schedule 方法在异常后不执行

jsf - @RequestScoped bean 实例是如何在运行时提供给 @SessionScoped bean 的?