jsf - 是什么使 Bean 成为 CDI Bean?

标签 jsf jakarta-ee ejb cdi managed-bean

在这个问题的最佳答案中,例如: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/

相关文章:

jsf - JSF 中的 Omnifaces 库,Java 类路径找不到类型

java - 如何从 JavaBean 刷新 jsf 页面

tomcat - 适用于 AWS 云的最佳应用服务器容器

eclipse - 如何在 Eclipse 中运行/调试 Java Web 服务项目

java - 从无状态 Bean 获取 JDBC Connection 对象

sql - Postgres : get min and max rows count in many to many relation table

java - 如果 JSF 过大,应该使用什么 Java-Web-Framework?

jsf - 处理模板评估期间发生的域异常

java - 如何实现xxx.domainname.com URL模式?

java - 在分布式环境中使用JPA而不使用EJB