Понимание пользовательского объема весной - PullRequest
9 голосов
/ 20 мая 2011

Весной мне нужна помощь в понимании пользовательской области видимости. Я прошел справочное руководство и кое-что понял, но меня беспокоит вопрос , когда на самом деле вызов метода get моей реализации области видимостиинтерфейс сделан Хотя я понимаю, что если определен bean-компонент с scope = myscope, то Spring вызывает метод get в моей реализации scope для получения объекта.Но когда я натолкнулся на пример, то заметил нечто странное.

Вызов метода get производится не при выполнении следующего оператора

Object targetBean = getApplicationContext().getBean(task.getBeanName());

, а при выполнении следующегооператор .

ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments);

Может ли кто-нибудь помочь мне, объяснив больше о реализации пользовательской области и вызове метода get.

PS: В рассматриваемом примере пользовательская область используется сThreadlocal .. Если кто-нибудь может предоставить мне рабочий пример ссылки на таможне с локальным потоком, это будет очень полезно

1 Ответ

3 голосов
/ 27 мая 2011

В прошлом я широко использовал пользовательские области для внедрения объектов с состоянием в одноэлементные сервисы.

Насколько я понимаю, прокси-оболочка оборачивает bean-объект, настроенный пользователем, и прокси-сервер извлекает bean-компонент из области видимости.о вызове метода bean-компонента.

См. также Spring Indepth

Так что в вашем случае

Object targetBean = getApplicationContext().getBean(task.getBeanName());

targetBean будет прокси

ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments);

Вызывает метод на прокси, который вызывает через org.springframework.beans.factory.config.Scope#get для получения правильного компонента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...