21

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

4

5 回答 5

13

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!";
    }
}

干杯!

于 2017-05-03T08:42:07.070 回答
7

CDI没有引入一种称为CDI Bean的新 bean 类型,它具有自己独特的组件模型。

CDI提供了一组服务,这些服务可由托管 bean 和由其现有组件模型定义的 EJB 使用。

因此,CDI 只是一个处理 CDI 生命周期的 Bean(EJB 或托管 Bean),具有Context和其他旧功能DI的范围。

于 2013-08-28T21:18:09.410 回答
5

CDI bean是由CDI container(例如 Weld)管理的 bean。

  • 如果是@injected- 它是 bean

  • 如果它是可能的@injects东西 - 它也是豆子。

于 2013-03-20T10:10:13.553 回答
3

CDI 在 Java EE 6 中被引入,以提供一些早期可用于 EJB 的功能,仅适用于由容器管理的所有组件。因此 CDI bean 涵盖了 Servlet、SOAP Web 服务、RESTful Web 服务、实体、EJB 等。

因此,您可以互换使用所有这些术语:

  • CDI豆
  • 托管豆
  • EJB bean
  • 容器管理 bean 等
于 2015-02-24T12:04:19.467 回答
2

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

但是,CDI bean的可能定义可能是:由于类上存在 CDI 注释或存档中存在文件而创建和注入的任何托管 bean。CDI bean 本身不是一个类,而是一个类的托管实例。beans.xml

例如下面的例子:

public class Logger{}
public class Producer {

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

Logger本身只是一个类。它在被生产者实例化并绑定到上下文后变为managed bean( )。CDI bean

CDI bean 只能存在于容器中。容器需要实现CDI规范。它扫描部分或全部类路径以查找 CDI 注释,并根据这些注释创建和管理相应的 bean。 从独立应用程序创建启用 CDI 的容器就像这样简单:

WeldContainer container = new Weld().initialize();
于 2019-11-12T16:33:20.730 回答