java - 为什么 WebApplicationContext 无法访问我的 spring 组件?

标签 java spring spring-mvc blazeds

我有一个用作 flex-blazeds 端点的 spring 组件(使用 @RemotingDestination),现在我需要将其重新用作 REST 端点。

除了现有的 blaze-ds servlet 之外,我所做的是创建一个额外的 rest servlet(当然是 DispatcherServlet 类型)。

然后我想使用 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 使用我所有的 spring 上下文文件,其中包括那些组件的组件扫描。

由于 flex-servlet 访问这些由全局上下文扫描的 @Component beans 没有问题,我假设 rest-servlet 也可以访问它们,我只需要将注释添加到组件。

奇怪的是,当我明确地为这些组件所在的包添加组件扫描时,其余调用就起作用了。

这意味着这些组件 bean 被创建了两次,一次用于全局上下文(因为它扫描包含此 flex servlet 扫描的配置文件),一次用于 rest-servlet 上下文(我用一个简单的静态验证了这一点计数器和类上的锁)。

我的问题是为什么 rest-servlet 不能看到 flex-servlet 可以看到的 bean?

最佳答案

虽然 servlet appcontext 确实可以访问来自 ContextLoaderListener appcontext 的 beans,但在将 HTTP 调用映射到 Controller 时不会引用这些 beans。所有 Controller bean 都必须直接在 servlet 的应用上下文中声明(或扫描),否则它们将被忽略。

我建议您将 REST 入口点注释(即 @RequestMapping)与 BlazeDS 的注释分开。例如,从您的其他帖子中获取您的 UserService 类:创建一个 UserController 类,在其上放置 REST 注释,然后从 UserController 委托(delegate)给用户服务UserController 将在 servlet 应用上下文中声明,并从 ContextLoaderListener 上下文中注入(inject) UserService

关于java - 为什么 WebApplicationContext 无法访问我的 spring 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679976/

相关文章:

java - 如何通过java点击按钮?

java - Spring 的@Scheduled 注解是如何工作的?

java - 具有单个 war 文件的 Spring 多模块项目,其中所有模块仅依赖于公共(public)模块

spring - 如何在Spring中使用LocalDateTime RequestParam?我得到 "Failed to convert String to LocalDateTime"

spring-mvc - 模型和 View 向前

java - 在内存中执行 jar/class 文件

java - 如何检查 Java 中的 CPU 和内存使用情况?

java - 使用 Java stream API 像 SQL GROUP BY 一样汇总数据

java.lang.IllegalStateException : Using named parameters

mysql - HTTP 状态 500 - 请求处理失败;嵌套异常是 org.hibernate.exception.ConstraintViolationException : could not execute update query