Как сделать так, чтобы устаревшая пружина веб-приложения знала на уровне контейнера для автоматической передачи бобов в сервлеты? - PullRequest
3 голосов
/ 17 марта 2010

У нас есть устаревшее веб-приложение (не основанное на Spring), и мы ищем лучшие практики для автоматического подключения некоторых новых настроенных (потоково-ориентированных) bean-компонентов Spring к переменным экземпляра в нескольких устаревших сервлетах. Переписать каждый сервлет в Spring MVC выходит за рамки. Для тестируемости мы не хотим, чтобы какой-либо специфичный для Spring код поиска bean-компонентов в сервлетах просматривал bean-компоненты по именам или аналогичным.

Обратите внимание, что нас не беспокоят конкретные области веб-компонентов, такие как сеанс или запрос; все услуги одноразовые.

Ниже показан соответствующий фрагмент кода

MyServlet extends LegacyServletSuperclass
{
   private MyThreadSafeServiceBean wantThisToBeAutowiredBySpring;
   ....

}

1 Ответ

2 голосов
/ 17 марта 2010

Вы можете использовать @Configurable в сочетании с <context:load-time-weaver /> и использовать @Autowired в своих сервлетах. Это позволяет обрабатывать классы, которые не создаются экземпляром в Spring, пружиной.

Вы также можете использовать другой подход - в методе init(..) вашего сервлета:

ApplicationContext ctx = 
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
if (ctx != null) {
    ctx.getAutowireCapableBeanFactory().autowireBean(this);
}

Это установит все зависимости пружины (где используется @Autowired / @Resource). Это будет работать в случае, если классы обслуживания определены весной, что, как я полагаю, имеет место.

С точки зрения тестируемости - если нет контекста веб-приложения, ничего не произойдет, и вы можете вручную установить свои зависимости. При необходимости вы также можете высмеивать контекст приложения, в зависимости от того, как вы тестируете свои сервлеты. .

...