Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中解码自定义名称空间?_Java_Spring - Fatal编程技术网

Java 如何在Spring中解码自定义名称空间?

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}" /&

我有时在Spring中使用自定义名称空间。比如CXF或ActiveMQ

下面是我如何声明嵌入式ActiveMQ代理服务器的示例:

<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());