使用纯注解配置springmvc的目标就是去掉web.xml和springmvc的xml配置文件,并使用配置类和初始化类来代替它们

1.创建一个类作为SpringMVC的配置类

此类需实现WebMvcConfigurer接口

介绍 注解@EnableWebMvc

使用在配置类上,可以开启对SpringMVC的注解的支持

相当于配置文件中的<mvc:annotation-driven/>

介绍 接口WebMvcConfigurer

SpringMVC的配置类需要实现此接口中的方法,其中的方法可以替代xml配置文件

这个接口里全是默认方法,可以选择要重写的默认方法来决定使用那些配置功能

(由于我自己也不太了解这个接口,所以只介绍几个常用的方法)

void extendMessageConverters(List<HttpMessageConverter<?>> converters)

信息转换器,可以用于解决中文乱码问题(目前只掌握了这一种用法)

void configureViewResolvers(ViewResolverRegistry registry) { }

用于配置视图解析器,可以替代xml中的视图解析器的bean,viewResolver方法可以将配置好的视图解析器添加到registry里,好像不能添加多个

void addViewControllers(ViewControllerRegistry registry){ }

用于配置视图控制器

void addResourceHandlers(ResourceHandlerRegistry registry){ }

用于在发送请求时过滤静态资源,相当于xml配置中的:

<mvc:resources mapping=”/statics/**” location=”/statics/”/>

void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { }

用于注册一个默认的Handler来处理静态文件,由于在配置DispatcherServlet时将拦截路径设置为”/”,导致某些静态文件无法方法,这个Handler就可以解决这个问题

暂且介绍这几个方法,因为这篇文章的重点并不是这个

至此SpringMVC的配置类编写完成

使用了配置类后,由于舍弃了mvc的配置文件,web.xml无法引用到配置信息,所以需要创建一个初始化类来替代web.xml

2.创建一个类作为webapp的初始化类

此类需继承AbstractAnnotationConfigDispatcherServletInitializer,并实现其中的三个抽象方法

1.protected abstract Class<?>[] getRootConfigClasses();

用于为RootApplicationContext指定配置类或组件类,返回RootApplicationContext指定配置类或组件类,此处的RootApplicationContext为Spring的配置类

RootConfig为添加了@Configuration和@ConmpontScan的配置类

2.protected abstract Class<?>[] getServletConfigClasses();

用于为ServletApplicationContext指定@Configuration和/或@Component类。
返回Servlet 应用程序上下文的配置,如果所有配置都是通过根配置类指定的,则为null 。

这里的WebMvcConfig就是继承了WebMvcConfigurer的配置类

3.protected String[] getServletMappings()

用于为DispatcherServlet指定 servlet 映射——例如”/” 、 “/app”等。

至此,webapp的初始化类编写完毕,现在可以尝试移除两个xml文件,并对项目进行构建