SpringMVC的Java Config

摘要

MAVEN的配置细节

因为我们使用Java Config来代替web.xml配置文件,所以需要修改一下maven-war-plugin的配置,避免因为其找到不web.xml文件而报错。


    org.apache.maven.plugins
    maven-war-plugin
    2.3
    
        
        false
    

Spring MVC的Java Config

web.xml的Java Config

  • 第一种方式,实现WebApplicationInitializer接口
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 
public class WebAppConfig {
}
/**
 * 实现WebApplicationInitializer 接口中的onStartup 方法
 * 

* 该类就相当于 web.xml 文件 */ public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { /** 下面的代码,等价于 : dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:applicationContext.xml 1 */ //1. 创建 AnnotationConfigWebApplicationContext AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); //用来加载所有的Bean webApplicationContext.register(WebAppConfig.class); webApplicationContext.setServletContext(servletContext); //2. 创建 DispatcherServlet ServletRegistration.Dynamic dispatcherServlet = // 通过DispatcherServlet来创建web 相关 Bean,所以传入webApplicationContext对象 servletContext.addServlet("dispatcherServlet", new DispatcherServlet(webApplicationContext)); /** 下面的代码,等价于 dispatcherServlet / */ dispatcherServlet.addMapping("/"); dispatcherServlet.setLoadOnStartup(1); //3. 注册filter FilterRegistration.Dynamic characterEncoding = servletContext.addFilter("characterEncoding", new CharacterEncodingFilter("utf-8", true)); characterEncoding.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "dispatcherServlet"); } }

  • 第二种方式,继承AbstractAnnotationConfigDispatcherServletInitializer 推荐使用这种方式
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 
public class WebAppConfig {
}
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * ContextLoaderListener创建的应用上下文中的Bean的配置文件
     * 也就是Spring的主配置文件
     */
    @Override
    protected Class[] getRootConfigClasses() {
        return new Class[]{Config.class};
    }

    /**
     * DispatcherServlet应用上下文相关的Bean的配置文件
     */
    @Override
    protected Class[] getServletConfigClasses() {
        return new Class[]{WebAppConfig.class};
    }

    /**
     * 将一个或者多种路径映射到DispatcherServlet
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

注册自定义Servlet,Filter和Linstener

  • 第一种方式,可以使用Servlet3.0的相关注解,例如@WebFilter
  • 第二种方式,可以通过实现Spring的WebApplicationInitializer接口,在该接口的方法中,注册相关Servlet,Filter和Linstener

你可能感兴趣的:(SpringMVC的Java Config)