2

在阅读 spring-rabbit 时,我偶然发现了以下配置 spring 组件的语法:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<rabbit:connection-factory id="connectionFactory"/>

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"/>

<rabbit:admin connection-factory="connectionFactory"/>

<rabbit:queue name="myqueue"/>

</beans>

我只知道 bean 配置组件的方式,您可以在其中声明一个带有 id 和 class 的 bean 并设置适当的属性。我不清楚上述方式,通过使用 XML 命名空间,配置组件以及 Spring 如何在内部处理它。

谢谢。

4

2 回答 2

1

Spring 的 XML 命名空间支持提供了一种同时注册多个组件的方法,采用更简洁和元数据驱动(或者实际上是特定于域)的方法。您可以使用名称空间处理程序执行的任何操作,也可以使用(可能更多)bean 定义来完成。

创建命名空间处理程序是一个相当简单的过程——而且 Spring 凭借其可扩展的特性很容易让您创建自己的,如果您愿意的话。

这是有关如何执行此操作的一些详细文档:

于 2013-11-13T04:35:16.507 回答
1

命名空间的使用其实无非就是快捷配置。在幕后,Spring 正在做所有的 bean 创建,就像你提到的那样,你习惯于自己做。至于如何,嗯,有几个组件。首先你需要一个注册的NamespaceHandler. 使用您的 spring-rabbit 示例,您将在 spring-rabbit jar 中找到 META-INF/spring/spring.handlers 中的一个文件,其中包含以下内容:

http\://www.springframework.org/schema/rabbit=org.springframework.amqp.rabbit.config.RabbitNamespaceHandler

这是注册RabbitNamespaceHandlerrabbit命名空间配置。在该文件旁边,您将看到一个名为 spring.schemas 的文件,其目的是注册约束 rabbit 命名空间的模式。

下一步是拥有一个或多个BeanDefinitionParser实例来执行将快捷方式配置转换为成熟的 bean 创建定义的“魔术”,可以这么说。在这个兔子示例中,您会发现ConnectionFactoryParser哪个负责解析<rabbit:connection-factory />元素。它只是查看您在 xml 中声明的所有属性、子元素等,并为您创建必要的 bean。

您也可以按照此公式创建自己的命名空间配置。

于 2013-11-13T04:36:51.863 回答