有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在SpringMVC4中在Servlet中注入依赖关系?

目前,在基于SpringMVC的应用程序中,我也在实现servlet(这是一个HealthCheckservlet)。 我试图使用@Autowire注释在这个servlet中注入一个类的依赖项,但这个类并没有实例化

请考虑下面的代码。

@WebServlet(name = "myServlet", urlPatterns = "/app2")
public class HealthCheckController extends HealthCheckServlet{

/** The Constant serialVersionUID. */

    private static final long serialVersionUID = 1L;

    @Autowire
      private MyService service;

    /**
     * method to check healthiness.
     *
     * @return true, if is healthy
     * @throws HealthCheckException the health check exception
     */
    @Override
    public boolean isHealthy() throws HealthCheckException {
        try {
            service.showDetails("12", false,null);
            System.out.println("True");
            return true;
        } catch (Exception  e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return false;
    }

您能建议我如何提供MyService类的依赖关系吗

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    添加注释中提到的“@Controller”,并更新URL映射。还有,什么叫isHealthy()?尝试在那里添加url映射

    @Controller
    public class HealthCheckController extends HealthCheckServlet{
    
    private static final long serialVersionUID = 1L;
    
    @Autowire
      private MyService service;
    
    @RequestMapping("/app2/*")
    public boolean isHealthy() throws HealthCheckException {
        try {
            service.showDetails("12", false,null);
            System.out.println("True");
            return true;
        } catch (Exception  e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
  2. # 2 楼答案

    这不是Spring管理的bean。尝试将@Component添加到类声明中

    @Component
    @WebServlet(name = "myServlet", urlPatterns = "/app2")
    public class HealthCheckController extends HealthCheckServlet{
    

    您还可以尝试将类重构为Spring控制器:

    @Controller
    @RequestMapping("app2")
    public class HealthCheckController extends HealthCheckServlet{
    

    您可以尝试的另一件事是在web中添加servlet。xml而不是使用@WebServlet注释

    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>mypackage.HealthCheckController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/app2</url-pattern>
    </servlet-mapping>