SpringMVC 注解配置

参考

  • Spring in Action(4th Edition)

不使用web.xml配置DispatchServlet

在Servlet 3.0以上环境, 容器会在classpath寻找实现了javax.servlet .ServletContainerInitializer接口的类. 如果找到了, 那么会用于配置该Servlet容器.

Spring提供了一个实现了该接口的类SpringServlet-ContainerInitializer. Spring的这个类会寻找任何实现了Web- ApplicationInitializer接口的类, 并将配置工作转交给它. Spring 3.2 加入了一个方便的基本实现类AbstractAnnotationConfigDispatcherServletInitializer. 那么我们只需要写一个类继承于该类, 那么将程序部署到Servlet 3.0容器的时候, 将会被自动发现而且用于配置servlet context.

实例

SpittrWebAppInitializer.java

  • getRootConfigClasses()
    其实就是对应ApplicationContext.xml, 配置了整个程序通用的beans.
  • getServletConfigClasses()
    其实就是对应SpringMVC的xml配置, 配置了Controller这些.
  • getServletMappings()
    其实就是对应DispatcherServlet的<servlet-mapping>
package me.xiaofud.spring101.spittr.config;

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

/**
 * Created by xiaofu on 17-11-11.
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

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

    protected String[] getServletMappings() {
        // mapping for DispatcherServlet
        return new String[]{"/app/*"};
//        return new String[]{"/"};
    }
}

RootConfig.java

package me.xiaofud.spring101.spittr.config;

import org.springframework.context.annotation.Configuration;

/**
 * Created by xiaofu on 17-11-11.
 * As application context
 */
@Configuration
@ComponentScan
public class RootConfig {

}

WebConfig.java
理解@EableWebMvc注解:

@EableWebMvc 等价于 xml 文件中的 <mvc:annotation-driven />.
使用该注解其实是导入了WebMvcConfigurationSupport, 以其作为基本的配置文件, 即会导入一些很常用的bean.

package me.xiaofud.spring101.spittr.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * Created by xiaofu on 17-11-11.
 * As springmvc context
 */
@Configuration
@EnableWebMvc
@ComponentScan("me.xiaofud.spring101.spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resourceViewResolver = new InternalResourceViewResolver();
        resourceViewResolver.setPrefix("/WEB-INF/views/");
        resourceViewResolver.setSuffix(".jsp");
        resourceViewResolver.setExposeContextBeansAsAttributes(true);
        return resourceViewResolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        // configure static content handling
        configurer.enable();
    }
}

部署到Tomcat后的输出:

12-Nov-2017 17:07:27.112 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.prepareRefresh Refreshing Root WebApplicationContext: startup date [Sun Nov 12 17:07:27 CST 2017]; root of context hierarchy
12-Nov-2017 17:07:27.164 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions Registering annotated classes: [class me.xiaofud.spring101.spittr.config.RootConfig]
12-Nov-2017 17:07:27.497 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Root WebApplicationContext: initialization completed in 400 ms
12-Nov-2017 17:07:27.536 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.servlet.DispatcherServlet.initServletBean FrameworkServlet 'dispatcher': initialization started
12-Nov-2017 17:07:27.540 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.prepareRefresh Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sun Nov 12 17:07:27 CST 2017]; parent: Root WebApplicationContext
12-Nov-2017 17:07:27.542 INFO [RMI TCP Connection(2)-127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions Registering annotated classes: [class me.xiaofud.spring101.spittr.config.WebConfig]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,122评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,850评论 19 139
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 5,719评论 0 3
  • 胖丁岚阅读 1,085评论 0 0
  • 清明燕归来,故乡梨花开。 走出近半生,少年依旧在。
    寸光白阅读 1,801评论 0 0

友情链接更多精彩内容