当前位置: 首页 > 知识库问答 >
问题:

什么使一个bean成为CDI bean?

壤驷志学
2023-03-14

例如,在这个问题的最上面的答案中:javaee6@javax。注释。ManagedBean与@javax。注射命名vs.@javax。面孔。ManagedBean我读到:

部署CDIBeans,必须放置一个名为bean的文件。类路径上META-INF文件夹中的xml。一旦您这样做,那么包中的每个bean都将成为CDIBean。

据说:

如果希望从JSF页面使用CDIBean,可以使用javax为其命名。注射命名注释。

我有一个这样的示例代码

@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,它不是cdibean(或者是吗?)。顺便说一下,我有一个豆子。我的WEB-INF文件夹中的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。。

那么在这个例子中我有CDIBean吗?@Inject在这里是如何工作的?

希望我的问题清楚,谢谢!

共有1个答案

仲鸿风
2023-03-14

根据CDI规范,每个JavaBean都是托管Bean(不要将其与JSF@ManagedBean混淆,这是不同的一个)在Bean所在的项目中。存在xml。因此,每个类都有资格进行依赖注入。请注意,此类的默认作用域是依赖的。

 类似资料:
  • 问题内容: 我正在尝试使用此命令安装Python软件包 我收到权限错误,不确定为什么。我可以使用来运行它,但是有人告诉我这是个坏主意,我应该改用virtualenv。 什么是虚拟环境?它对我有什么作用? 问题答案: 与系统Python和库一起运行会将您限制为OS提供商选择的一个特定Python版本。试图在一个Python安装上运行所有Python应用程序,可能会导致库集合之间发生版本冲突。对系统P

  • 在我开始添加更多存储库之前,我的代码只使用一个存储库包就可以正常工作 主数据源配置类: 存储库: 服务层: 服务实施: 实体类: 其他实体和存储库已被排除在外。

  • Spring文档——根据经验,所有有状态bean都应该使用原型范围,而无状态bean应该使用单例范围。 因此,当您必须跨上下文一致地维护一些状态/数据时,有状态bean是必要的。说银行应用程序。您希望您的对象在各种操作(存款、取款等)中保持同步。 因此,在单例范围内,您会得到同样的事情——跨上下文的对象一致性。 那么,为什么javadoc会声明Opposite呢? 帮助!!:)

  • 问题内容: 我正在学习EJB3,只是好奇何时可以方便地使用SFSB?当SFSB确实可以轻松解决一些复杂问题时,我找不到任何很好的示例。 实际上,我看到SLSB可以用作Web服务,这很方便。但我不知道何时使用SFSB。我只看到它的问题,因为我们应该学习一些有关它的知识,我们应该编写由批注组成的代码,其内容要少于完全注释,我们应该使用烦人的查找方法……而我们得到的任何回报都没有。 例如,我们不能使用S

  • 问题内容: 使用动态代理的用例是什么? 它们与字节码生成和反射有何关系? 有什么推荐的读物吗? 问题答案: 我强烈推荐此资源。 首先,您必须了解什么是代理模式用例。请记住,代理的主要目的是控制对目标对象的访问,而不是增强目标对象的功能。访问控制包括同步,身份验证,远程访问(RPC),惰性实例化(休眠,Mybatis),AOP(事务)。 与静态代理相反,动态代理生成在运行时需要Java反射的字节码。