4

Например, если я объявляю в моем прикладном context.xml:Как работает пространство имен Spring?

<context:annotation-config/> 

Я прочитал от official documentation:

неявно зарегистрированные постпроцессоры включают AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, а также вышеупомянутый RequiredAnnotationBeanPostProcessor.

Но мне было интересно, как весна это работает под капотом, я думаю, что этот 1-лайнер преобразуется в несколько определений бобов для постпроцессоров, упомянутых в документации.

Тем не менее, мой вопрос в том, что компонент Spring/класс реализует это преобразование 'от 1-лайнера к нескольким определениям бобов' функциональность?

+1

См: http://stackoverflow.com/questions/11174286 –

ответ

5

Если вы хотите знать, что делает аннотацию-конфигурация теги за кулисами заглянуть в AnnotationConfigBeanDefinitionParser

Если вы хотите узнать больше об общем механизме, используемом для определения таких тегов проверить this секции весенняя справочная документация.

Вам необходимо определение схемы, а NameSpaceHandler и А BeanDefinitionParser

+0

Благодаря Gkamal для подачи тезисов ссылки, будут читать на них. –

1

Хорошие ссылки от gkamal.

Что происходит, так это то, что Spring регистрирует все эти пользовательские пространства имен при запуске приложения, а обработчики, специфичные для пространства имен, регистрируют парсеры для каждого элемента в пользовательском пространстве имен. Вот, например, обычай имена я сделал в одном из моих собственных проектов:

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/KiteNamespaceHandler.java

Обратите внимание, что все NamespaceHandler делает это зарегистрировать кучу анализаторов для пользовательского пространства имен.

Затем, когда Spring фактически анализирует конфигурационный файл, он превращает элемент пользовательского пространства имен в определения bean-компонентов, как вы предлагаете в своем вопросе. Иногда это просто очень простое определение компонента:

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/CircuitBreakerParser.java

и иногда это целая куча бин:

https://github.com/williewheeler/kite/blob/master/src/main/java/org/zkybase/kite/config/xml/AnnotationConfigParser.java

+0

Спасибо Вилли за ваши примеры настройки на эту тему. –

0

Это помогает экстернализовать значение свойств из определения фасоли в отдельном файл.

Определенное свойство определяется во время запуска.

Заполнители следует этот стиль $ {свойство-имя}

Смежные вопросы