Понимание пользовательской области в spring

#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 лет спустя.