在这个问题的最佳答案中,例如:Java EE 6 @javax.annotation.ManagedBean vs. @javax.inject.Named vs. @javax.faces.ManagedBean我读到了:
要部署CDI bean,必须将名为beans.xml的文件放在a中 类路径上的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 Managed Bean)
UserDao类看起来像这样:
@Stateless
public class UserDao {
EntityManager em;
@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}
所以,据我所知,这是一个EJB ..
在这个例子中我有没有CDI bean? @Inject如何在这里工作?
希望我的问题很清楚,问候!
答案 0 :(得分:2)
通过CDI specification,每个JavaBean都是Managed Bean
(不要将它与JSF @ManagedBean
混淆,这是一个不同的),项目中存在beans.xml
。因此,每个班级也有资格进行依赖注入。请注意,此类的默认范围是Dependent
。