什么是CDI bean?

时间:2013-03-20 10:02:45

标签: java java-ee cdi

我有点困惑,我们将CDI bean称为使用@inject注释或我们在其中使用@inject的bean注入它们的bean?

5 个答案:

答案 0 :(得分:8)

  

CDI bean 是CDI可以实例化,管理和注入的类   自动满足其他对象的依赖关系。几乎任何   Java类可以由CDI管理和注入。

例如,PrintServlet依赖于Message实例,并由CDI运行时自动注入。

PrintServlet.java

@WebServlet("/printservlet")
public class PrintServlet extends HttpServlet {
    @Inject private Message message;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().print(message.get());
    }
}

Message.java(此类是CDI bean

@RequestScoped
public class Message {
    @Override
    public String get() {
        return "Hello World!";
    }
}

干杯!

答案 1 :(得分:6)

CDI没有引入一种名为“CDI Bean”的新bean类型 自己独特的组件模型。 CDI提供了一组服务,这些服务可以由其现有组件模型定义的托管bean和EJB使用。 所以CDI只是处理CDI生命周期的Bean(EJB或Managed Bean),其范围为“Context”和其他旧功能“DI”。

答案 2 :(得分:2)

CDI bean是由CDI容器管理的bean(例如Weld)。所以,如果它是@injected - 它是bean,如果它可能是@injects的东西 - 它也是bean。

答案 3 :(得分:2)

CDI在Java EE 6中引入,只为EJB提供的一些功能提供给容器管理的所有组件。所以CDI bean涵盖了Servlet,SOAP Web服务,RESTful Web服务,实体,EJB等。

  

所以你可以互相使用所有这些术语:CDI bean,bean,托管bean,EJB bean,容器管理bean等。

答案 4 :(得分:0)

我认为CDI bean一词在技术上可能不正确。 托管bean 似乎更合适。

尽管如此, CDI bean 的可能定义可以是:由于存在CDI注释而创建并注入的任何托管bean 关于类或由于存档中beans.xml文件的存在而导致的strong>。 CDI bean本身不是类,而是类的托管实例。

例如举个例子:

public class Logger{}
public class Producer {

    @Produces
    public Logger getLogger() {
        return new Logger();
    }
}

Logger本身只是一个类。在生产者实例化并绑定到上下文之后,它变成了managed beanCDI bean)。

CDI bean只能存在于容器内。 容器需要实现CDI规范。它根据创建和管理相应bean的方式扫描部分或全部类路径以获取CDI注释。 从独立应用程序创建启用CDI的容器非常简单:

WeldContainer container = new Weld().initialize();