java - Glassfish 4,CDI 中的简单示例因 WELD-001408 Unsatisfied dependencies 而失败

标签 java jakarta-ee dependency-injection glassfish cdi

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

public class Temp {

public Temp(){

}

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

小服务程序

@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("<body>");
        out.println("<h1> Here it is"+temp.getMe()+ "</h1>");
        out.println("</body>");
    }
}
...

但我必须在 glassfish 4 中出现以下错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Temp] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private xxx.example.NewServlet.temp]

我做错了什么?

最佳答案

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


<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                  http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
  bean-discovery-mode="all">
</beans>

说明

推荐值“annotated”仅识别带注释的 CDI 托管 beans。没有任何注释的 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 ".

关于java - Glassfish 4,CDI 中的简单示例因 WELD-001408 Unsatisfied dependencies 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899920/

相关文章:

java - Firebase 实时数据库 .info/connected False 当它应该是 True

java - Tomcat 中的 REST API 客户端返回 ConnectionTimedOut

java - 如何在 Spring 框架中检查其他用户 session 是否活跃

spring - 获取参数编码

java - 如何初始化 Spring Data JPA 规范?

java - frame.setResizable(false) 不起作用!它改变窗口大小而不是保持尺寸

c# - 为什么使用 AddScoped() 而不是 AddSingleton()?

java - 基于国家/地区的 Spring Boot 依赖注入(inject)

angular - 没有提供带有 Angular 2 和 Http 服务的 XHRBackend

java - 我把 noRollbackFor 放在哪里有关系吗?