Поправь меня, если что-то не так.
Как я понимаю, вся функциональность Spring, а именно DI, работает при получении бинов через
Spring Context, т.е. метод getBean ().
В противном случае, никто не может работать, даже если мой метод помечен @Transactional, и я буду
создайте класс-владелец с новым оператором, управление транзакциями не будет предоставлено.
Я использую Tomcat 6 в качестве контейнера сервлета.
Итак, мой вопрос: как сделать методы Servlet управляемыми средой Spring.
Проблема здесь в том, что я использую фреймворк, а его сервлеты расширяют функциональность
базовые сервлеты Java, поэтому у них больше методов. Тем не менее, web.xml присутствует в приложении как обычно.
Дело в том, что я не контролирую поток создания сервлетов, я могу переопределить только несколько методов
каждого сервлета, поток в основном записан в некотором XML-файле, но я контролирую этот процесс
с использованием графического интерфейса.
Так что, в основном, я только добавляю код к нескольким методам каждого сервлета.
Как заставить эти методы управляться средой Spring? Основное, что мне нужно сделать, это
делает эти методы транзакционными (@Transactional).
комментарий к Божо:
@ Божо Давай посмотрим.
В методах этих сервлетов я работаю с возможностями фреймворка, скажем, специальными переменными, которые получены и сохранены в текущем сеансе.
И что необходимо, так это циклически проходить по этим коллекциям на основе фреймворка, сохраняя при этом некоторые значения в базе данных.
То, что вы предлагаете, представляет новый очень сложный объект, чтобы его можно было передать на уровень обслуживания. (Сервисный уровень не будет ничего знать о фреймворке, его классах и объектах, хранящихся в текущем сеансе!
Во-первых, мы «оборачиваем» коллекции, основанные на фреймворке, в такой объект, поэтому копируем в него все. Опять же, метод уровня сервиса должен либо сохранить изменения в базе данных, либо, в худшем случае, вернуть новый сложный объект, чтобы метод инфраструктуры сервлета мог обновлять переменные структуры в зависимости от результата выполнения метода уровня сервиса.
Это обходной путь, но Как вы думаете, это хорошая идея?