【发布时间】: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 是注入的。