Пространства имен Spring XML: как мне найти классы реализации за ними?

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

Но мне трудно точно знать, какие классы использует Spring в своих пространствах имен! Какие шаги необходимы для их поиска?

Например, пространство имен безопасности:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:sec="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                           http://www.springframework.org/schema/security 
                           http://www.springframework.org/schema/security/spring-security-3.1.xsd">

и что-то вроде:

<sec:http>
    ...
    <sec:logout />
</sec:http>

Как узнать, какие классы используются в & lt; sec: logout / & got; & quot; Пространство имен? Я не могу найти информацию, посмотрев наhttp://www.springframework.org/schema/security/spring-security-3.1.xsd !

Куда мне смотреть?

 duffymo24 июн. 2012 г., 03:15
Насколько я знаю, пространства имен XML не обязательно имеют какое-либо отношение к классам.

Ответы на вопрос(4)

В случае Spring Security это хорошо документировано: см.Приложение & # xA0; B. & # XA0; Пространство имен безопасности

Смотрите также этот блог:ЗА ВЕСОМ-БЕЗОПАСНОСТЬЮ ВЕСНЫ

Почти все они названы*BeanDefinitionParser, Первый шаг, используя ваш браузер, откройте Spring JavaDocs и нажмите<Ctrl>-F (или же<Command>-F). Поиск BeanDefinitionParser. Из соответствующих классов один или два по своим именам будут выглядеть так, как будто они обрабатывают исследуемые вами элементы пространства имен. Для этих классов может понадобиться немного взглянуть на исходный код, но в конечном итоге вы найдете то, что хотите.

Кроме того, в вашей IDE, вы можете перейти кBeanDefinitionParser.java а затем выполните команду «Найти пользователя»; (IntelliJ) или «Иерархия типов» (Затмение), чтобы найти все реализации этого интерфейса. Есть несколько классов, которые не следуют*BeanDefinitionParser соглашение об именовании. Ваша IDE предоставит вам полный список.

Я думаю, что Spring должен на самом деле документировать в разделе Namespace своих справочных документов имена классов, которые обрабатывают каждый элемент.

Каждое пространство имен XML анализируется егоNamespaceHandler, Класс обработчика для пространства имен безопасностиSecurityNamespaceHandler, который указан в файле spring.handlers внутри META-INF файла spring-security-config-XXX.jar.

Элемент http анализируетсяHttpSecurityBeanDefinitionParser и его выход дочернего элемента анализируетсяorg.springframework.security.config.http.LogoutBeanDefinitionParser(Пакет с защитой).

Также смотрите заметки вКодирование NamespaceHandler и совет вКакие бины регистрируются в пространстве имен безопасности spring? если вы планируете настроить его.

Решение Вопроса

Каждое пространство имен Spring имеет связанныйNamespaceHandler реализация. Схемы пространства имен отображаются в файлы схемы внутри Spring JAR в различныхspring.schemas файлы (см. такжеSpring DI applicationContext.xml, как именно используется xsi: schemaLocation?).

Пространства имен схемы XML также отображаются на классы обработчиков вspring.handlers файлы (несколько, поскольку каждый Spring JAR может представлять разные пространства имен). Для вашего удобства вот список наиболее распространенных пространств имен:

Spring core aop - AopNamespaceHandler c - SimpleConstructorNamespaceHandler cache - CacheNamespaceHandler context - ContextNamespaceHandler jdbc - JdbcNamespaceHandler jee - JeeNamespaceHandler jms - JmsNamespaceHandler lang - LangNamespaceHandler mvc - MvcNamespaceHandler oxm - OxmNamespaceHandler p - SimplePropertyNamespaceHandler task - TaskNamespaceHandler tx - TxNamespaceHandler util - UtilNamespaceHandler Spring Security security - SecurityNamespaceHandler oauth - OAuthSecurityNamespaceHandler Spring integration int - IntegrationNamespaceHandler amqp - AmqpNamespaceHandler event - EventNamespaceHandler feed - FeedNamespaceHandler file - FileNamespaceHandler ftp - FtpNamespaceHandler gemfire - GemfireIntegrationNamespaceHandler groovy - GroovyNamespaceHandler http - HttpNamespaceHandler ip - IpNamespaceHandler jdbc - JdbcNamespaceHandler jms - JmsNamespaceHandler jmx - JmxNamespaceHandler mail - MailNamespaceHandler redis - RedisNamespaceHandler rmi - RmiNamespaceHandler script - ScriptNamespaceHandler security - IntegrationSecurityNamespaceHandler sftp - SftpNamespaceHandler stream - StreamNamespaceHandler twitter - TwitterNamespaceHandler ws - WsNamespaceHandler xml - IntegrationXmlNamespaceHandler xmpp - XmppNamespaceHandler

Если вы перейдете к источнику каждого из этих классов, вы быстро обнаружите различныеBeanDefinitionParser реализации, отвечающие за анализ фактических определений XML.

 13 нояб. 2015 г., 20:42
 24 авг. 2013 г., 21:00
Для весенней партии:batch-CoreNamespaceHandler
 electrotype24 июн. 2012 г., 21:58
Спасибо, Томаш! Это, смешанное с некоторыми трюками от ericacm, мне очень помогло. В затмении (для тех, кто его использует), открыв & quot; Тип иерархии & quot; для NamespaceHandler и BeanDefinitionParser также помогает.

Ваш ответ на вопрос