понедельник, 1 октября 2012 г.

Spring и сервлеты. Инъектирование бинов.

Порой очень хочется, чтобы при создании сервлета автоматически инъектировались бины Spring.
Однако стоит отметить важную особенность, что жизненным циклов бинов управляет Spring, а жизненным циклом сервлета управляет контейнер сервлетов.  По этой причине автоматически инъектировать бины в сервлет не получится.



Есть альтернативное решение. Spring содержит интерфейс
org.springframework.web.HttpRequestHandler. В этом интерфейсе есть метод handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response). Фактически это один в один метод service сервлета. Мы портируем наш сервлет так, что класс реализует данный интерфейс. Этот класс мы объявляем в spring. Далее в web.xml мы создаём описание сервлета. При этом имя сервлета должно совпадать с именем определённого бина spring, а класс сервлета - org.springframework.web.context.support.HttpRequestHandlerServlet.

Как результат - наш сервлет содержит инъектированные бины spring.

Аналогичное решение есть и для фильтров сервлета. Только в этом случае класс называется org.springframework.web.filter.DelegatingFilterProxy.

Комментариев нет:

Отправить комментарий