Как внедрить зависимость в Servlet в Spring MVC 4? - PullRequest
0 голосов
/ 30 мая 2018

В настоящее время в моем весеннем приложении на основе mvc я также использую сервлеты (это сервлет Healthcheck).Я пытаюсь внедрить зависимость класса в этом сервлете, используя аннотацию @Autowire, но этот класс не является экземпляром.

Пожалуйста, рассмотрите код ниже.

@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 ]

0 голосов
/ 30 мая 2018

Добавьте «@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();
    }
}
0 голосов
/ 30 мая 2018

Это не управляемый компонент Spring.Попробуйте добавить @Component к объявлению класса.

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

Вы также можете попробовать реорганизовать свой класс в Spring Controller:

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

Еще одна вещь, которую вы можете попробовать, это добавитьсервлет в web.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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...