Клиент нанял нас для поддержки действительно старого веб-приложения Struts 1.Для запроса функции нам нужно реализовать новое действие, которое зависит от класса Service.Исходная кодовая база состоит в основном из спагетти-кода и не использует ничего, кроме контейнера для внедрения зависимостей.Мы постепенно реорганизуем все, чтобы соответствовать современным стандартам, но сейчас нам нужно обойтись с исходной базой кода.
Как внедрить Сервис в мой класс Action, не вводя контейнер зависимостей?
package com.example.action;
import com.example.service.ExampleService;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public final class ExampleAction extends Action {
private ExampleService exampleService;
// This Action cannot be instantiated by Struts because of its dependency! :(
public ExampleAction(ExampleService exampleService) {
this.exampleService = exampleService;
}
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// ...
exampleService.doSomething();
// ...
}
}
Я нашел много информации о том, как интегрировать контейнер Spring с Struts 1, но я не смог найти ничего о том, как управлять процессом создания экземпляров Action в Strut вручную.Я действительно не хочу проводить рефакторинг больше, чем нужно, чтобы новая функция работала, поэтому я бы предпочел быстрое и грязное решение, в котором я просто вмешиваюсь в процесс создания экземпляров Action Strut, чтобы внедрить мою службу вручную.