我有一个用作flex-blazeds端点的弹簧组件(使用@RemotingDestination
),我现在需要将它重新用作REST端点。为什么我的Spring组件不能访问WebApplicationContext?
除了现有的blaze-ds servlet之外,我所做的是创建一个额外的rest servlet(类型为DispatcherServlet
的courser)。
我当时就想使用REST(因此我以前question)来访问相同的部件,我发现,我得到一个404
我休息-servlet.xml中的配置文件看起来是这样的:
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
而我的ContextLoaderListener
使用了我所有的弹簧上下文文件,其中包括这些组件的组件扫描。
由于flex-servlet访问由全局上下文扫描的这些@Component bean没有问题,所以我认为rest-servlet也可以访问它们,我只需要将注释添加到组件中。
奇怪的部分是,当我明确地为这些组件所在的包添加组件扫描时,其余的调用都起作用。
这意味着这些组件bean正在被创建两次,一次是为全局上下文(因为它扫描一个包含此次扫描的配置文件,用于flex servlet),另一个用于其他servlet上下文(我用一个简单的静态计数器和类上的锁)。
我的问题是为什么rest-servlet看不到flex-servlet可以使用的bean?
感谢您的解释。你能否引用我的资源来说明这个春天的决定(“在将HTTP调用映射到控制器时,这些bean将不会被查阅)”? – Ittai 2012-03-13 10:44:33
@ Ittai:不,不是。这只是它的工作方式,我不认为文档明确指出。 – skaffman 2012-03-13 10:45:52
好的,非常感谢。 – Ittai 2012-03-13 10:54:02