我有一个spring组件用作flex-blazeds端点(使用@RemotingDestination
),我现在需要将其重用为REST端点。
除了现有的blaze-ds servlet之外,我所做的是创建一个额外的rest servlet(类型为DispatcherServlet
的courser)。
然后我想使用REST访问相同的组件(因此我以前的question),我发现我得到了404.
我的rest-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扫描的配置文件)和一个用于rest-servlet上下文(我用一个简单的静态验证了这一点)反击和锁定班级)。
我的问题是为什么rest-servlet不能看到flex-servlet可以使用的bean?
答案 0 :(得分:1)
虽然servlet appcontext确实能够从<{1}} appcontext访问 bean,但在将HTTP调用映射到控制器时,不会查询这些bean。必须直接在servlet的appcontext中声明(或扫描)所有控制器bean,否则它们将被忽略。
我建议您将REST入口点注释(即ContextLoaderListener
)与BlazeDS注释分开。例如,从您的其他帖子中获取@RequestMapping
类:创建一个UserService
类,将REST注释放在该类上,然后从UserController
委派给UserController
。 UserService
将在servlet app上下文中声明,并使用UserController
上下文中的UserService
注入。