在非bean对象中注入EJB CDI?

时间:2014-07-24 17:34:54

标签: java javabeans cdi code-injection

我有

@Named("bean1")
@javax.enterprise.context.SessionScoped
public class Bean1 implements Serializable {
    // ...
}

@Named("bean2")
@javax.enterprise.context.SessionScoped
public class Bean2 implements Serializable {
    private SomeClass object = new SomeClass();
}

public class SomeClass {
    @Inject
    private Bean1 injBean;
}

我的问题:

1)Bean2是会话作用域。 Bean2.object有哪个范围?
2)为什么someClass中的注射不起作用?感谢。

1 个答案:

答案 0 :(得分:3)

  

1)Bean2是会话作用域。 Bean2.object有哪个范围?

嗯,Bean2.object只是Bean2实例中的一个对象,因此没有任何CDI范围。

  

2)为什么someClass中的注入不起作用?感谢。

至少有两个原因:

  • someClass(顺便说一句,检查命名约定)不是CDI托管bean
  • Bean2.object引用的对象不是由CDI创建的,因此CDI甚至不知道该实例存在。

要解决此问题,请将someClass设为托管bean,然后让CDI将实例注入Bean2.object