Spring 提供了一个 XML 命名空间来简化 JMS 配置。使用 JMS namespace 元素,您需要引用 JMS 模式,如以下示例所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jms="http://www.springframework.org/schema/jms" (1)
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/jms
		https://www.springframework.org/schema/jms/spring-jms.xsd">

	<!-- bean definitions here -->

</beans>
1 引用 JMS 模式。

命名空间由三个顶级元素组成:、 和 。 允许使用注释驱动的侦听器端点。 并定义共享侦听器容器配置,并可以包含子元素。 以下示例显示了两个侦听器的基本配置:<annotation-driven/><listener-container/><jca-listener-container/><annotation-driven/><listener-container/><jca-listener-container/><listener/>

<jms:listener-container>

	<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>

	<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>

</jms:listener-container>

前面的示例等效于创建两个不同的侦听器容器 Bean 定义和两个不同的 Bean 定义,如图所示 在使用 MessageListenerAdapter 中。除了显示的属性之外 在前面的示例中,该元素可以包含多个可选元素。 下表描述了所有可用属性:MessageListenerAdapterlistener

该元素还接受几个可选属性。这 允许自定义各种策略(例如,和 )以及基本的 JMS 设置和资源引用。通过使用 这些属性,您可以定义高度自定义的侦听器容器,同时 仍然受益于命名空间的便利性。<listener-container/>taskExecutordestinationResolver

您可以自动将此类设置公开为 指定要通过属性公开的 Bean, 如以下示例所示:JmsListenerContainerFactoryidfactory-id

<jms:listener-container connection-factory="myConnectionFactory"
		task-executor="myTaskExecutor"
		destination-resolver="myDestinationResolver"
		transaction-manager="myTransactionManager"
		concurrency="10">

	<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>

	<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>

</jms:listener-container>

下表描述了所有可用的属性。查看类级 javadoc 以获取有关各个属性的更多详细信息。javadoc 还讨论了事务选择和消息重新传递方案。

使用模式支持配置基于 JCA 的侦听器容器非常相似, 如以下示例所示:jms

<jms:jca-listener-container resource-adapter="myResourceAdapter"
		destination-resolver="myDestinationResolver"
		transaction-manager="myTransactionManager"
		concurrency="10">

	<jms:listener destination="queue.orders" ref="myMessageListener"/>

</jms:jca-listener-container>

下表描述了 JCA 变体的可用配置选项: