Spring如何启动这个应用程序?

时间:2015-03-17 02:21:09

标签: java spring jms hornetq

我正在解析在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是按惯例在示例中,还是它是一个有意义的字符串。

由于

2 个答案:

答案 0 :(得分:0)

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

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

阅读here

答案 1 :(得分:0)

spring中的容器是框架核心的一部分。框架将扫描实现某个容器接口的所有容器,并初始化它们。

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

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