【发布时间】:2014-07-25 08:36:49
【问题描述】:
我有一个停止支持 IE 7 的网络应用程序。为了通知用户这一变化,我们有一个 Spring MVC HandlerInterceptorAdapter 负责将用户重定向到一个警告 URL。
这是相关的部署描述符(web.xml)内容:
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/web-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这个应用程序只使用了老式的 Spring MVC 控制器,即没有注释;最近我不得不使用以下 XML 使用注释来配置控制器:
<beans>
<!-- ... -->
<!-- A lot of beans and controllers using Classic Spring MVC -->
<bean id="browserVersionInterceptor" class="...BrowserVersionInterceptor" />
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="detectHandlersInAncestorContexts" value="true" />
<property name="interceptors">
<list>
<ref bean="browserVersionInterceptor" />
</list>
</property>
</bean>
<beans>
<context:annotation-config />
<bean id="mvcAnnotationConfig"
class="....MvcAnnotationConfig">
</bean>
</beans>
</beans>
在该配置中,我为控制器设置了组件扫描:
@Configuration
@EnableWebMvc
@ComponentScan("package.to.controllers")
public class MvcAnnotationConfig {
//...not much here
}
应用此更改后,我发现文件上一部分中声明的拦截器都不起作用。
以及新创建的带有注释的控制器:
@Controller
@RequestMapping("/Tickets.html")
public class SupportProcessController {
@RequestMapping(method = GET)
public ModelAndView show() {...}
@ResponseBody
@RequestMapping(method = POST, produces = "application/json")
public Object apply() {...}
}
你知道为什么会这样吗?
【问题讨论】:
-
你使用什么类来加载上下文配置?
-
XML 由 Spring 的 DispatcherServlet 加载
-
我认为默认的
ApplicationContext类是XmlWebApplicationContext,我认为它不能处理@Configurationbean。 -
好,所以这是不可能的。让我们看看你的 web.xml 和任何其他相关的上下文。
-
您在控制器中使用了哪些注释?你的拦截器是如何声明的?
标签: java spring spring-mvc