Java 如何在Spring中解码自定义名称空间?
我有时在Spring中使用自定义名称空间。比如CXF或ActiveMQ 下面是我如何声明嵌入式ActiveMQ代理服务器的示例:Java 如何在Spring中解码自定义名称空间?,java,spring,Java,Spring,我有时在Spring中使用自定义名称空间。比如CXF或ActiveMQ 下面是我如何声明嵌入式ActiveMQ代理服务器的示例: <amq:broker useJmx="false" persistent="true"> <amq:transportConnectors> <amq:transportConnector uri="${mobilepush.activemq.broker.transport.connector.uri}" /&
<amq:broker useJmx="false" persistent="true">
<amq:transportConnectors>
<amq:transportConnector uri="${mobilepush.activemq.broker.transport.connector.uri}" />
</amq:transportConnectors>
<amq:persistenceAdapter>
<amq:kahaPersistenceAdapter directory="${mobilepush.activemq.broker.queue.persistence.directory}" maxDataFileLength="33554432"/>
</amq:persistenceAdapter>
</amq:broker>
但有时自定义名称空间文档不够精确,我想了解Java类的情况
因此,我想知道的是,如何获得定制名称空间使用的原始Springbean声明等价性
IDE中是否包含任何“自动翻译工具”
据我所知,似乎有不同的工具来创建定制的Spring名称空间,比如XBean。。。在不了解所有这些工具的情况下,是否有一种自动或手动的方法来理解名称空间是如何工作的
这是Spring如何处理自定义名称空间的一个很好的参考-
每个自定义名称空间都有一个关联的名称空间,该名称空间使用META-INF/spring.handlers
中的spring.handler文件在不同的jar文件中注册
例如,对于上下文名称空间,如果您查看spring-context*.jar文件中的META-INF/spring.handlers
,您将看到上下文名称空间的名称空间处理程序:
http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler
它在内部为上下文名称空间下的标记注册不同的解析器
registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());
这些解析器中的每一个都注册了您提到的不同bean定义-
因此,不幸的是,没有简单的工具可以找出为特定的自定义名称空间注册了哪些bean定义,您必须仔细阅读特定BeanDefinition解析器的代码
ActiveMQ使用的XBean通过处理一些boiler plate简化了注册自定义名称空间处理程序的过程谢谢您的回答。因此,最后,如果库本身提供“原始Spring等价性”,这样我们就不必检查名称空间如何工作了,那就更好了……是的,本质上是这样。我有时认为它是一种允许底层实现改变的抽象,例如,在Spring 3.1.0之前,mvc:annotation-driven
名称空间用于注册AnnotationDrivenHandlerAdapter,现在在Spring 3.1.x中它是RequestMappingHandlerAdapter,它的行为非常不同,但从用户的角度来看,没有任何变化,mvc:annotation-driven
保护用户不受这种变化的影响
http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler
registerBeanDefinitionParser("property-placeholder", new PropertyPlaceholderBeanDefinitionParser());
registerBeanDefinitionParser("property-override", new PropertyOverrideBeanDefinitionParser());