#spring #scope
#spring #область
Вопрос:
Мне нужна помощь в понимании пользовательской области видимости в spring Я просмотрел справочное руководство и имею некоторое представление об этом, но вопрос, который меня беспокоит, заключается в том, когда на самом деле выполняется вызов метода get моей реализации интерфейса scope Хотя, насколько я понимаю, если определен компонент с scope = myscope, то Spring вызывает метод get в моей реализации scope для извлечения объекта. Но когда я наткнулся на пример, я заметил кое-что странное.
Вызов метода get не выполняется при выполнении следующего оператора
Object targetBean = getApplicationContext().getBean(task.getBeanName());
но при выполнении следующего оператора.
ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments);
Может ли кто-нибудь помочь мне, объяснив больше о реализации пользовательской области и вызове метода get.
PS: В рассматриваемом примере пользовательская область используется с Threadlocal .. Если кто-нибудь может предоставить мне рабочий пример ссылки customscope с thread local, это будет большим подспорьем
Ответ №1:
В прошлом я широко использовал пользовательские области для внедрения объектов с отслеживанием состояния в одноэлементные сервисы.
Насколько я понимаю, прокси-сервер обертывает компонент с пользовательской областью видимости, и прокси-сервер извлекает компонент из области видимости при вызове метода компонента.
Смотрите также Spring Indepth
Итак, в вашем случае
Object targetBean = getApplicationContext().getBean(task.getBeanName());
targetBean
будет прокси-сервером
ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments);
Вызывает метод на прокси, который вызывает через org.springframework.beans.factory.config.Scope#get
для извлечения правильного компонента
Комментарии:
1. К вашему сведению, ссылка на статью или книгу Spring Indepth мертва. Я не уверен, насколько это важно 7 лет спустя.