【问题标题】:How does Spring start this app?Spring如何启动这个应用程序?
【发布时间】:2015-03-17 14:27:31
【问题描述】:

我正在解析 Java 应用程序的一些继承代码,该应用程序部署为 JBOSS 中的 WAR 文件,并使用 Spring、JMS 和 HornetQ。由于缺乏更好的短语,我试图弄清楚是什么让应用程序“运行”。我见过的大多数 Spring 示例都包含一个带有 main() 方法的应用程序,该方法以某种方式强制作用于 Spring 上下文提供的 bean。此应用程序没有 main()。据我所知,这就是正在发生的事情:

WAR 文件的 web.xml 使用侦听器在 JBOSS 中启动应用程序时启动 Spring,并将配置文件传递给它

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-context.xml</param-value>
</context-param>

Spring 然后处理 application-context.xml 文件,其中包括这个 sn-p:

<bean id="jmsContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="destination" />
    <property name="messageListener" ref="appListenerProxy" />

通过 application-context.xml 中的更多引用,“appListenerProxy”最终指的是应用程序中实现 SessionAwareMessageListener 的类,它响应队列上的消息。

让我感到困惑的部分是我没有看到任何类型的代码来获取 jmsContainer bean 并对其进行处理。这是一个定义明确的 ID,以便 Spring 框架正在寻找它吗?如果是这样,是否记录在某处(以及框架可能正在寻找的其他 ID)? http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html 似乎是我找到的最接近的,但它并没有真正指定该 ID 是否只是按照惯例出现在示例中,或者它是否是一个有意义的字符串。

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 Spring?此外,如果没有看到有问题的代码,我认为这无法明确回答。但是,由于 Spring 是 DI framework,我认为可以安全地假设 bean 是注入的。

标签: java spring jms hornetq


【解决方案1】:

spring 中的容器是框架核心的一部分。 Framework会扫描所有实现了某个容器接口的容器,并对其进行初始化。

这也依赖于控制反转 (IoC) 原则。

有关 IoC 容器的更多信息,请查看此页面: IoC Container

【讨论】:

  • 我认为这或多或少是我想要的。看起来 InitializingBean 接口是我缺少的关键部分 - 框架在实例化它们之后初始化它们,并使用 autoStartup 属性导致容器开始响应消息。
【解决方案2】:

你真的不需要对DefaultMessageListenerContainer bean 做任何事情,它的框架部分。

DefaultMessageListenerContainer bean 在应用程序启动时与您的 JMS 目标建立 JMS 会话。当在您的目的地收到消息时,它会调用 messageListener onMessage 方法 - 在您的情况下为 appListenerProxy bean。

阅读here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2017-10-07
    • 2021-08-25
    相关资源
    最近更新 更多