Какие модули и классы в Spring отвечают за реализацию аннотаций - PullRequest
0 голосов
/ 28 декабря 2018

Spring поддерживает различные аннотации, которые библиотека / модуль / класс / шаблон обрабатывают логикой аннотаций.где Spring реализует поведение аннотаций для @Controller, @RestController ... Пример: чтобы добавить новую пользовательскую аннотацию, мы добавляем at-sign (@), а затем обрабатываем содержимое с помощью отражения Java.Итак, как в Spring Framework, как они это делают и как Spring изменяет логику, когда они обновляют свою версию для своих аннотаций?

@ PostConstruct и @PreDestroy дескриптор в классе InitDestroyAnnotationBeanPostProcessor, так что класс дескриптора для @RestController.Я хочу понять, как реализована пружина для @RestController, потому что я хочу добавить новую аннотацию, которая включает @RestController и мою дополнительную логику.

1 Ответ

0 голосов
/ 06 января 2019

Хорошо, ниже приведен общий обзор того, как @Controller / @RestController работает с уровнями исходных кодов.Надеюсь, что это даст вам направление.За подробностями обращайтесь к исходным кодам .

  1. Когда инициализируется RequestMappingHandlerMapping bean-компонент (то есть вызывается afterPropertiesSet()), он найдет все bean-компоненты, которыепомечены @Controller / @RestController.Извлеките полезные метаданные из этих bean-компонентов, используя отражение, и сохраните их внутри MappingRegistry

  2. Когда получено HttpServletRequest, вызовите RequestMappingHandlerMapping#lookupHandlerMethod(), чтобы узнать, какой HandlerMethod может обработатьthis HttpServletRequest from MappingRegistry.

  3. RequestMappingHandlerAdapter#handleInternal() вызывает совпадение HandlerMethod и, наконец, использует отражение для фактического вызова метода на @Controller / @RestController

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