我有一個用作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