我有一个使用flex的red5应用程序。现在我只想使用spring mvc(DispatcherServlet)在其上开发一个小型Web应用程序。但问题是我无法从mvc访问red5-web.xml中定义的bean,而且我也无法访问spring mvc中的red-web bean。错误是NoSuchBeanDefinitionException。
两者之间没有桥梁。是否可以在spring mvc中获取red5.context。所以我可以访问一切。这是代码片段
RED5-web.xml中
<beans>
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="/WEB-INF/red5-web.properties" />
</bean>
<bean id="web.context" class="org.red5.server.Context"
autowire="byType" />
<bean id="web.scope" class="org.red5.server.WebScope"
init-method="register">
<property name="server" ref="red5.server" />
<property name="parent" ref="global.scope" />
<property name="context" ref="web.context" />
<property name="handler" ref="web.handler" />
<property name="contextPath" value="${webapp.contextPath}" />
<property name="virtualHosts" value="${webapp.virtualHosts}" />
</bean>
<bean id="live.recorder" class="com.live.application.RecordManager">
<constructor-arg ref="web.handler" />
</bean>
<bean id="web.handler" name="application"
class="com.live.application.LiveContent"
singleton="true" autowire="byName" />
</beans>
web应用-servlet.xml中
<beans>
<context:annotation-config/>
<context:component-scan base-package="com.live.web"/>
<context:component-scan base-package="com.live.service"/>
<mvc:annotation-driven/>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"/>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
<property name="order" value="0"/>
</bean>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="1"/>
</bean>
<bean name="users.search_results" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="renderedAttributes" value="users"/>
</bean>
<bean name="system.status" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="renderedAttributes">
<set>
<value>status</value>
<value>notifications</value>
</set>
</property>
</bean>
<bean name="system.update" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="renderedAttributes">
<set>
<value>error</value>
<value>status</value>
<value>notification</value>
</set>
</property>
</bean>
</beans>
我使用spring注释作为控制器和服务。
答案 0 :(得分:1)
最后我解决了这个问题。问题是
通常,Spring DispatcherServlet(MVC)创建一个Web上下文,并将父项设置为由spring mvc ContextLoaderListener加载的ApplicationContext。 Red5有自己的上下文加载器监听器,它加载自己的上下文。两个背景之间没有关系。
要覆盖它,我们必须将red5 ApplicationContext设置为DispatcherServlet的父上下文。为此,您必须覆盖Dispatcherservlet中的initWebApplicationContext()函数。
我写了一篇博客文章,请参考http://www.arulraj.net/2012/04/red5-with-spring-mvc.html GIT回购是https://github.com/arulrajnet/red5Demo
答案 1 :(得分:0)
有多种方法可以访问多个XML文件中定义的bean
您可以将某些XML文件定义为“全局”可用“
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd“&GT;
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/red5-web.xml
</param-value>
</context-param>
您可以指定servlet的其他XML文件
<servlet>
<display-name>CXF Servlet</display-name>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/red5-web.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
您可以通过
将XML文件导入到彼此中&LT; import resource =“classpath:WEB-INF / red5-web.xml”/&gt;