等效于基于Spring注释的配置中的mvc:default-servlet-handler?

2022-09-02 20:09:55

是否有可能在 ?现在我有:<mvc:default-servlet-handler/>AnnotationConfig(Web)ApplicationContext

@Configuration
@ImportResource("classpath:/mvc-resources.xml")
class AppConfig {
  // Other configuration...
}

在我的:resources/mvc-resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler/>
</beans>

它按预期工作。是否可以在不导入 XML 文件的情况下执行此操作?这将是减少一些样板的好方法。


答案 1

如果您将 Spring 3.1 与 WebMvc 一起使用,则可以配置默认的 servlet 处理,如下所示:

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

答案 2

在深入挖掘之后,我发现这是一个已知的问题,并通过即将到来的Spring 3.1中的注释功能来解决。

我用下面的代码解决了我的问题:

@Configuration
@Import(FeatureConfig.class)
class AppConfig {
   ...
}

@FeatureConfiguration
class FeatureConfig {
  @Feature
  public MvcDefaultServletHandler defaultHandler() {
    return new MvcDefaultServletHandler();
  }
}

不过,这确实需要使用里程碑版本的弹簧,但它似乎是处理这个问题的最干净,最优选的方式。


推荐