在这个问题的最佳答案中,例如:Java EE 6 @javax.annotation.ManagedBean vs. @javax.inject.Named vs. @javax.faces.ManagedBean我读到:
To deploy CDI beans, you must place a file called beans.xml in a META-INF folder on the classpath. Once you do this, then every bean in the package becomes a CDI bean.
据说:
If you want to use the CDI bean from a JSF page, you can give it a name using the javax.inject.Named annotation.
我有一个示例代码,如下所示:
@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托管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 在这里如何工作?
希望我的问题很清楚,问候!
最佳答案
通过 CDI specification ,在 beans.xml
的项目中,每个 JavaBean 都是一个 ManagedBean
(不要将其与 JSF @ManagedBean
混淆,这是不同的) > 存在。所以每个类也都有资格进行依赖注入(inject)。请注意,此类的默认范围是Dependent
。
关于jsf - 是什么使 Bean 成为 CDI Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579963/