我正在解析在JBOSS中部署为WAR文件的Java应用程序的一些继承代码,并使用Spring,JMS和HornetQ。我试图弄清楚,由于缺乏一个更好的短语,是什么让应用程序“去”#34;。我见过的大多数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文件,该文件包含以下代码段:
<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中的几个引用,&#34; appListenerProxy&#34;最终指的是应用程序中实现SessionAwareMessageListener的类,它响应队列中的消息。
绊倒我的部分是我没有看到任何类型的代码来获取jmsContainer bean并对其做些什么。这是一个定义良好的ID,这样Spring框架正在寻找它吗?如果是这样,那是否在某处记录(以及框架可能正在寻找的其他ID)? http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html似乎是我找到的最接近的,但它并没有真正指定该ID是按惯例在示例中,还是它是一个有意义的字符串。
由于
答案 0 :(得分:0)
你真的不需要对DefaultMessageListenerContainer
bean做任何事情,它的框架工作部分。
DefaultMessageListenerContainer
bean在应用程序启动时与您的JMS目标建立JMS会话。当您在目的地收到消息时,它会在您的案例messageListener
bean中调用onMessage
appListenerProxy
方法。
阅读here。
答案 1 :(得分:0)
spring中的容器是框架核心的一部分。框架将扫描实现某个容器接口的所有容器,并初始化它们。
这也依赖于控制反转(IoC)原理。
有关IoC Container的更多信息,请查看此页面: IoC Container