SpringMVC的零配置实现

来源:互联网 发布:淘宝10元包邮 编辑:程序博客网 时间:2024/06/06 10:45

传统方式配置方式通过个web.xml 配置 org.springframework.web.servlet.DispatcherServlet,实现请求的路由和相关流程的控制。

当前基于Spring 版本5.0.2.RELEASE

web.xml中的基本配置

<servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

阅读源代码发现底层一样实现WebApplicationInitializer并重写onStartup

取代web.xml

import java.util.EnumSet;import javax.servlet.DispatcherType;import javax.servlet.FilterRegistration;import javax.servlet.MultipartConfigElement;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRegistration.Dynamic;import org.springframework.web.WebApplicationInitializer;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.filter.CharacterEncodingFilter;import org.springframework.web.servlet.DispatcherServlet;import com.digimaple.core.constant.Repository;import com.digimaple.core.constant.Sys;/** * @ClassName WebOnStartup * @Description 容器启动装载配置 * @author Cheng.Wei * @date 2017年12月9日 上午0:25:35 *  */public class WebOnStartup implements WebApplicationInitializer{/* (non-Javadoc) * @see org.springframework.web.WebApplicationInitializer#onStartup(javax.servlet.ServletContext) */@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext webContext = createWebContext(WebMvc.class);Dynamic dynamic = servletContext.addServlet(Sys.SERVLET_NAME, new DispatcherServlet(webContext));dynamic.addMapping("/");dynamic.setLoadOnStartup(1);}/** * 自定义配置类来实例化一个Web Application Context * @param annotatedClasses * @return */private AnnotationConfigWebApplicationContext createWebContext(Class<?>... annotatedClasses) {AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();webContext.register(annotatedClasses);return webContext;}}


spring-servlet.xml配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd ">    <!-- SpringMVC配置信息  -->    <context:component-scan base-package="org.dhweicheng">        <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>    </context:component-scan>    <mvc:annotation-driven/>    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/>    <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">        <property name="contentType" value="text/html;charset=UTF-8"/>    </bean>    <mvc:default-servlet-handler/></beans>


取代spring-servlet.xml


import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.FilterType;import org.springframework.core.io.ClassPathResource;import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import org.springframework.web.servlet.view.BeanNameViewResolver;import org.springframework.web.servlet.view.json.MappingJackson2JsonView;/** * @ClassName WebMvc * @Description 表现层配置 * @author Cheng.Wei * @date 2017年12月9日 上午0:40:00 * 实现 {@link org.springframework.web.servlet.config.annotation.WebMvcConfigurer} */@Configuration  @EnableWebMvc  @ComponentScan(basePackages = "org.dhweicheng",includeFilters= {@ComponentScan.Filter(type=FilterType.ANNOTATION, value= {org.springframework.stereotype.Controller.class})})public class WebMvc implements WebMvcConfigurer{protected static final Logger logger = LogManager.getLogger(WebMvc.class); @Beanpublic LocalValidatorFactoryBean validator() {logger.debug("LocalValidatorFactoryBean");return new LocalValidatorFactoryBean();}@Beanpublic BeanNameViewResolver beanNameViewResolver() {logger.debug("BeanNameViewResolver");return new BeanNameViewResolver();}@Beanpublic MappingJackson2JsonView jsonView() {logger.debug("MappingJackson2JsonView");MappingJackson2JsonView mappingJackson2JsonView = new MappingJackson2JsonView();mappingJackson2JsonView.setContentType("text/html;charset=UTF-8");return mappingJackson2JsonView;}/**激活静态资源处置策略*/public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}}

至此可以删除web.xml配置和springMVC配置,而这均已通过java代码实现。


原创粉丝点击