使用JavaConfig来配置Spring MVC中的DispatcherServlet

来源:互联网 发布:手机数据恢复精灵root 编辑:程序博客网 时间:2024/03/29 10:04

使用JavaConfig来配置Spring MVC中的DispatcherServlet

我们常常见到的是使用xml来配置Spring MVC中的DispatcherServlet。例如,在这篇博文(http://blog.csdn.net/u010412719/article/details/71597874)中就是使用的是在web.xml文件来配置的。即像DispathcerServlet这样的servlet会配置在web.xml文件中,这只是配置DispathcerServlet的方法之一。借助于Servlet3规范和Spring3.1的功能增强,可以使用Java将DispatcherServlet配置在servlet容器中,而不会再使用web.xml文件。

本文介绍如何使用JavaConfig来配置Spring MVC中的DispatcherServlet。

完整具体步骤如下:

1、借助于IDEA工具建立一个Spring MVC工程,具体步骤省略。

2、添加相关依赖,pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.wrh</groupId>  <artifactId>springmvcdemo02</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>springmvcdemo02 Maven Webapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.12</version>      <scope>test</scope>    </dependency>    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>4.3.8.RELEASE</version>    </dependency>    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>4.3.8.RELEASE</version>    </dependency>    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>javax.servlet-api</artifactId>      <version>3.1.0</version>    </dependency>  </dependencies>  <build>    <finalName>springmvcdemo02</finalName>  </build></project>

3、添加一个HelloInitializer类,该类继承了
AbstractAnnotationConfigDispatcherServletInitializer,并重写了其中的三个方法。内容具体如下:

    package com.javaconfig.config;    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;    /**     * Created by wuranghao on 2017/5/11.     */    public class HelloInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{        @Override        protected Class<?>[] getRootConfigClasses() {            return new Class<?>[]{RootConfig.class};        }        //表明要求DispathcherServlet加载应用上下文时,使用定义在WebConfig配置类中的bean,(即使用Java配置)        @Override        protected Class<?>[] getServletConfigClasses() {            return new Class<?>[]{WebConfig.class};        }        //将一个或多个路径映射到DispatcherServlet上,这里指定的"/"表示它会时应用的默认Servlet。它会处理进入应用的所有请求        @Override        protected String[] getServletMappings() {            return new String[]{"/"};        }    }

首先我们需要知道的是:只有是扩展了
AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动的配置DispatcherServlet和Spring应用上下文,Spring应用上下文会位于应用程序的Servlet上下文之中。
即通过AbstractAnnotationConfigDispatcherServletInitializer 来配置DispatcherServlet是传统web.xml的替代方案。

其中,getServletConfigClasses方法返回的是带有@Configuration注解的类将会用来定义DispathcerServlet应用上下文中的bean。

而getRootConfigClasses()方法返回的带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean。

4、WebConfig.java

    /**     * Created by wuranghao on 2017/5/11.     */    @Configuration    @EnableWebMvc    @ComponentScan("com.javaconfig.controller")    public class WebConfig extends WebMvcConfigurerAdapter{        @Bean        public ViewResolver viewResolver(){            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();            viewResolver.setPrefix("/WEB-INF/views/");            viewResolver.setSuffix(".jsp");            return viewResolver;        }        @Override        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {            configurer.enable();        }    }

说明:其中:@EnableWebMvc is equivalent to mvc:annotation-driven in XML. It enables support for @Controller-annotated classes that use @RequestMapping to map incoming requests to specific method.

@ComponentScan is equivalent to context:component-scan base-package=”…” providing with where to look for spring managed beans/classes.

5、RootConfig.java

    /**     * Created by wuranghao on 2017/5/11.     */    @Configuration    @ComponentScan(basePackages = {"com.javaconfig.controller"},        excludeFilters = {            @ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)        })    public class RootConfig {    }

6、编写控制器:HelloController.java

    /**     * Created by wuranghao on 2017/5/11.     */    @Controller    public class HelloController {        @RequestMapping(value = "/hello",method = RequestMethod.GET)        public String hello(){            return "hello";        }    }

以上就是一个通过JavaConfig来配置DispatcherServlet的完整的Spring mvc相关代码。

参考资料

1、书籍:Spring实战

2、http://websystique.com/springmvc/spring-4-mvc-helloworld-tutorial-annotation-javaconfig-full-example/

2 0
原创粉丝点击