Glassfish 4,CDI中的简单示例因WELD-001408不满意的依赖性而失败

我是CDI的新手。 这是我的第一个例子,我正在尝试运行它。 在网上搜索后,我编写了以下代码:我想要注入的类

public class Temp { public Temp(){ } public String getMe(){ return "something"; } } 

Servlet的

 @WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"}) public class NewServlet extends HttpServlet { @Inject public Temp temp; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println(""); out.println("

Here it is"+temp.getMe()+ "

"); out.println(""); } } ...

但我必须跟踪glassfish 4中的错误:

org.jboss.weld.exceptions.DeploymentException:WELD-001408在注入点[[BackedAnnotatedField] @Inject private xxx.example.NewServlet.temp]中带有限定符[@Default]的[Temp]类型的不满意依赖项

我究竟做错了什么?

WEB-INF不存在beans.xml ,或者文件需要将bean-discovery-mode="annotated"更改为bean-discovery-mode="all"


    

说明

建议值“ annotated ”仅识别带注释的CDI托管bean。 没有任何注释的Bean将被忽略。 由于您的Temp类不是CDI bean,因此建议不适用于您的情况。

使用bean-discovery-mode =“annotated”

要使用带annotated ,请使用@RequestScoped注释该类:

 // Import only this RequestScoped import javax.enterprise.context.RequestScoped; @RequestScoped public class Temp { public Temp() { } public String getMe() { return "something"; } } 

RequestScoped将您的Temp类转换为CDI bean,并将与bean-discovery-mode="annotated"

在我使用这个命令:

 asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false 

所以禁用enable-implicit-cdi为我工作。