Spring - 缓存 Destination JndiObjectFactoryBean 时,它是否保持与 ​​JMS 代理的任何连接打开?

Spring - When a Destination JndiObjectFactoryBean is cached, does it keep any connection open to the JMS broker?

我们通过 JNDI 查找配置我们的 JMS 目标,如下所示:

@Bean
JndiObjectFactoryBean myTopic(@Value("${topic}") String topic,
                              JndiTemplate jndiTemplate) {

    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
    jndiObjectFactoryBean.setJndiName(topic);

    return jndiObjectFactoryBean;
}

初始化此 bean 时,Spring 确认对象存在并将其缓存以备后用。这个 Destination 的缓存是否也涉及到我们的代理创建的持久连接?还是仅在实例化我们的 CachingConnectionFactory 时才物理创建连接?

当您在 CachingConnectionFactory 实例上第一次调用 createConnection() 时创建(唯一且共享的)连接,并在调用 destroy() 或 [=13= 时释放] 如合同所述(CachingConnectionFactory 继承自 SingleConnectionFactory):

A JMS ConnectionFactory adapter that returns the same Connection from all createConnection() calls, and ignores calls to Connection.close()