此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

从 2.5 版开始,Spring 还提供了对基于 JCA 的容器的支持。尝试 从提供程序的类名自动确定类名。因此,通常可以提供 Spring 的通用 ,如以下示例所示:MessageListenerJmsMessageEndpointManagerActivationSpecResourceAdapterJmsActivationSpecConfigSpring中文文档

@Bean
public JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
		MessageListener myMessageListener) {

	JmsActivationSpecConfig specConfig = new JmsActivationSpecConfig();
	specConfig.setDestinationName("myQueue");

	JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
	endpointManager.setResourceAdapter(resourceAdapter);
	endpointManager.setActivationSpecConfig(specConfig);
	endpointManager.setMessageListener(myMessageListener);
	return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
	resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
		setResourceAdapter(resourceAdapter)
		activationSpecConfig = JmsActivationSpecConfig().apply {
			destinationName = "myQueue"
		}
		messageListener = myMessageListener
	}
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
	<property name="resourceAdapter" ref="resourceAdapter"/>
	<property name="activationSpecConfig">
		<bean class="org.springframework.jms.listener.endpoint.JmsActivationSpecConfig">
			<property name="destinationName" value="myQueue"/>
		</bean>
	</property>
	<property name="messageListener" ref="myMessageListener"/>
</bean>

或者,您可以使用给定对象设置一个。该对象也可能来自 JNDI 查找 (使用 )。以下示例演示如何执行此操作:JmsMessageEndpointManagerActivationSpecActivationSpec<jee:jndi-lookup>Spring中文文档

@Bean
JmsMessageEndpointManager jmsMessageEndpointManager(ResourceAdapter resourceAdapter,
		MessageListener myMessageListener) {

	ActiveMQActivationSpec spec = new ActiveMQActivationSpec();
	spec.setDestination("myQueue");
	spec.setDestinationType("jakarta.jms.Queue");

	JmsMessageEndpointManager endpointManager = new JmsMessageEndpointManager();
	endpointManager.setResourceAdapter(resourceAdapter);
	endpointManager.setActivationSpec(spec);
	endpointManager.setMessageListener(myMessageListener);
	return endpointManager;
}
@Bean
fun jmsMessageEndpointManager(
	resourceAdapter: ResourceAdapter, myMessageListener: MessageListener) = JmsMessageEndpointManager().apply {
		setResourceAdapter(resourceAdapter)
		activationSpec = ActiveMQActivationSpec().apply {
			destination = "myQueue"
			destinationType = "jakarta.jms.Queue"
		}
		messageListener = myMessageListener
	}
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
	<property name="resourceAdapter" ref="resourceAdapter"/>
	<property name="activationSpec">
		<bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
			<property name="destination" value="myQueue"/>
			<property name="destinationType" value="jakarta.jms.Queue"/>
		</bean>
	</property>
	<property name="messageListener" ref="myMessageListener"/>
</bean>

请参阅 JmsMessageEndpointManager 的 javadoc、JmsActivationSpecConfig、 和 ResourceAdapterFactoryBean 了解更多详细信息。Spring中文文档

Spring 还提供了一个不绑定到 JMS 的通用 JCA 消息端点管理器:.此组件允许 用于使用任何消息侦听器类型(例如 JMS)和任何 特定于提供程序的对象。请参阅您的 JCA 提供商的文档,以便 了解连接器的实际功能,并参阅 GenericMessageEndpointManager javadoc 了解特定于 Spring 的配置详细信息。org.springframework.jca.endpoint.GenericMessageEndpointManagerMessageListenerActivationSpecSpring中文文档

基于 JCA 的消息端点管理与 EJB 2.1 消息驱动 Bean 非常相似。 它使用相同的基础资源提供程序协定。与 EJB 2.1 MDB 一样,您可以使用任何 在 Spring 上下文中,您的 JCA 提供程序也支持消息侦听器接口。 尽管如此,Spring 还是为 JMS 提供了明确的“便利”支持,因为 与 JCA 端点管理合同一起使用的最常见的端点 API。
基于 JCA 的消息端点管理与 EJB 2.1 消息驱动 Bean 非常相似。 它使用相同的基础资源提供程序协定。与 EJB 2.1 MDB 一样,您可以使用任何 在 Spring 上下文中,您的 JCA 提供程序也支持消息侦听器接口。 尽管如此,Spring 还是为 JMS 提供了明确的“便利”支持,因为 与 JCA 端点管理合同一起使用的最常见的端点 API。