Как интегрировать старое приложение Struts с Spring 3.x - PullRequest
5 голосов
/ 29 апреля 2011

Мне было интересно, как и каким образом предпочтительнее интегрировать приложение Struts 1.x с Spring 3.x, чтобы мы могли извлечь выгоду из материала IOC.

Ответы [ 4 ]

6 голосов
/ 04 мая 2011

Используйте ContextLoaderPlugin и установите контроллер стоек для процессора класса " AutowiringRequestProcessor " следующим образом (в struts-config.xml):

<controller>
    <set-property property="processorClass" value="org.springframework.web.struts.AutowiringRequestProcessor" />
</controller>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/config/action-servlet.xml"/>
</plug-in>

action-servlet.xml должен быть пустым контекстным файлом bean:

<beans></beans>

Добавьте следующий параметр init в ActionServlet в web.xml:

<init-param>
    <param-name>autowire</param-name>
    <param-value>byName</param-value>
</init-param>

Просто напишите обычные действия Struts и добавьте аннотацию «@Component» к каждому действию, чтобы Spring обнаруживала действия и создавала из них бин. «AutowiringRequestProcessor» найдет правильный компонент, соответствующий классу действий, определенному в вашем struts-config.xml.

Теперь также можно вводить другие bean-компоненты в класс Action с помощью @Autowired на установщике (-ах).

2 голосов
/ 03 мая 2011

Вы можете использовать интерфейс ApplicationContextAware, чтобы служебный класс имел доступ к ApplicationContext.

public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    public static Object getSpringBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

    public void setApplicationContext(ApplicationContext appContext)
        throws BeansException {
        applicationContext = appContext;
   }
}

Затем вы можете получить доступ к статическому методу из вашего класса Action.Не самое элегантное решение, но оно работает.

2 голосов
/ 30 апреля 2011

Использовать ContextLoaderPlugIn . Устаревший в Spring 3.0, но все еще там.

Я использовал его со Struts 1.x и Spring 2.5.x - он работал прекрасно. Такой интеграционный подход позволяет внедрять компоненты Spring непосредственно в действия Struts, что довольно чисто и просто.

0 голосов
/ 04 февраля 2016

Это не работает. ContextLoaderPlugin недоступен в ЛЮБОЙ версии Spring после Spring 2.x. Struts 1.x не совместим ни с одной версией Spring после 2.x. Невозможно настроить любую версию Spring после 2.x для использования Struts 1.x. Вам также необходимо понизить версию обновления Struts для Spring. Вероятно, было бы проще понизить версию Spring, если вы не используете спящую версию после 3.x.

...