Spring Boot中的Dispatcher Servlet

时间:2015-08-13 06:31:43

标签: spring spring-boot

在包装类型为war的Spring Boot应用程序中,我正在配置Spring MVC。据我所知,我们不必手动配置Dispatcher Servlet。但是,我用旧的web.xml样式我用来配置Dispatcher Servlet然后我用来传递contextClass和contextConfigLocation如下

tooltip

我相信这是为了表明SpringMvcConfig(我的Spring mvc配置的自定义类)是Spring MVC的配置类..

但是,在Spring boot中,如果自动配置Dispatcher Servlet,我如何将自定义类传递给调度程序Servlet?

在我的Spring Boot应用程序中,我的SpringMvcConfig类从WebMvcConfigurerAdapter扩展,并使用@Configuration类注释

需要帮助......

3 个答案:

答案 0 :(得分:0)

如果您的配置类位于同一个包或主类的子包中(使用@SpringBootApplication注释),则无需执行任何操作。 @SpringBootApplication扫描包中的所有组件和所有子包。

但是,如果您想要扫描任何其他包,可以使用@ComponentScan。一个例子:

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = {SpringSampleAppApplication.class, LemonConfig.class})
public class SpringSampleAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringSampleAppApplication.class, args);
    }

}

使用自定义@SpringBootApplication了解@ComponentScan如何被三个注释替换。

还有其他方法可以导入配置文件,但我发现以上最简单的常见方案。

答案 1 :(得分:0)

在由@Configuration注释的配置类中,您可以定义dispatcherServlet并将init-parameter传递给它。

@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(dispatcherServlet());
    registrationBean.addInitParameter("contextClass","org.springframework.web.context.support.AnnotationConfigWebApplicationContext");  
    registrationBean.addInitParameter("contextConfigLocation","com.xxx.yyy.jdorderspringmvcweb.config.SpringMvcConfig");
    return registrationBean;
}

另一种方法是创建参数映射,然后为注册bean设置参数。 This流显示了如何执行此操作。

答案 2 :(得分:0)

我认为您必须按如下方式创建一个配置类:

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class MySpringMvcDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { DemoAppConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}