我有点困惑,我们将CDI bean称为使用@inject注释或我们在其中使用@inject的bean注入它们的bean?
答案 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 bean
(CDI bean
)。
CDI bean只能存在于容器内。 容器需要实现CDI
规范。它根据创建和管理相应bean的方式扫描部分或全部类路径以获取CDI注释。
从独立应用程序创建启用CDI的容器非常简单:
WeldContainer container = new Weld().initialize();