Как я могу внедрить зависимости в десериализованный компонент?
Некоторые из моих bean-компонентов Spring должны быть сериализованы на этапе рендеринга-ответа нашего приложения JSF, а затем десериализованы в начале следующего запроса. Некоторые из этих bean-компонентов имеют зависимости, которые ограничиваются запросом. Если я настраиваю зависимости с помощью прокси-сервера с областью действия ("<aop:scoped-proxy>"
), я не могу сериализовать зависимые компоненты - прокси-сервер не сериализуем.
Итак, сейчас мы делаем это, объявляя соответствующие переменные-члены сериализованных классов bean-компонентов как переходные, а затем вызываем context.getAutowireCapableBeanFactory().configureBean(bean, name)
сразу после десериализации bean-компонентов - но это отстой, потому что инициализатор bean-компонента вызывается снова. (Что касается других зависимостей, которые находятся в той же области видимости, не являются переходными и десериализованы, я даже не уверен, почему они не перезаписываются configureBean
, но я не думаю, что они есть.)
Что лучше? Должен ли я просто получить определение компонента, пройтись по нему, найти зависимости, ограниченные областью запроса, а затем вызвать getBean(name)
в контексте?
(Кстати, я не уверен, что это что-то меняет, но мы используем Spring довольно странно. Мы создаем новый класс ClassPathXmlApplicationContext для каждого неопубликованного HTTP-запроса, а не один WebApplicationContext. постбэк, мы десериализовали bean-компоненты. Поэтому, когда я говорю «scoped to the request», я вру; эти bean-объекты на самом деле имеют синглтонную область. Я хотел бы использовать WebApplicationContext и более разумную область видимости с ним, но насколько как я могу сказать, это ортогонально нашей проблеме на данный момент.)