例如,在这个问题的最佳答案中:Java EE 6 @javax.annotation.ManagedBean vs. @javax.inject.Named vs. @javax.faces.ManagedBean我读到:
要部署 CDI bean,您必须将名为 beans.xml 的文件放在类路径上的 META-INF 文件夹中。一旦执行此操作,包中的每个 bean 都将成为 CDI bean。
而且据说:
如果要使用 JSF 页面中的 CDI bean,可以使用 javax.inject.Named 注释为其命名。
我有一个示例代码,如下所示:
@ManagedBean
@ViewScoped
public class SignUpPage {
private User user;
@PostConstruct
public void init() {
user = new User();
}
@Inject
private UserDao userDao;
// rest of the class
据我了解,我的 bean 仍然是 JSF Managed Bean,它不是 CDI bean(或者是吗?)。顺便说一句,我的 WEB-INF 文件夹中有一个 beans.xml。
@Inject 在这里工作得很好。另外,我可以用 EL 访问 bean 就好了(这让我觉得它仍然是一个 JSF 托管 Bean)
UserDao 类看起来像这样:
@Stateless
public class UserDao {
EntityManager em;
@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}
所以,据我所知,它是一个 EJB ..
那么在这个例子中我有任何 CDI bean 吗?@Inject 在这里如何工作?
希望我的问题很清楚,问候!