前言:刚毕业我就接触到了SpringBoot,当初感觉必成大器,第一印象就是内置了所有环境,打完包丢哪里都能跑起来,简化了tomcat Xml配置的一系列部署操作
1.SpringMvc XML配置
说到配置SpringMvc,大家第一时间反应就是xml配置,目前国内的各类博客或者各类老师都是套用这种方式,一直都是认为这种方式是唯一的方式,再说Spring官方一直支持。
1.1 配置web.xml
web.xml是servlet容器的配置文件,当启动一个WEB项目时,servlet容器首先会读取项目中的webapp/WEB-INFO文件夹的web.xml配置文件里的配置,主要用来配置监听器listener,servlet,上下文参数context-param。
<!-- 配置监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- ServletContext参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config/*.xml</param-value>
</context-param>
ContextLoaderListener(上下文加载监听) 继承了ServletContextListener(Servlet上下文监听),当ServletContext的生命周期发生变化会触发相应的事件
通过这个监听器进来的会通过createWebApplicationContext获取ConfigurableWebApplicationContext
具体代码: ContextLoader ->configureAndRefreshWebApplicationContext方法
protected void configureAndRefreshWebApplicationContext
(ConfigurableWebApplicationContext wac, ServletContext sc) {
//添加ServletContext
wac.setServletContext(sc);
String configLocationParam = sc.getInitParameter("contextConfigLocation");
//添加Spring*.xml
wac.setConfigLocation(configLocationParam);
customizeContext(sc, wac);
//读取配置加载,刷新Spring上下文
wac.refresh();
}
DispatcherServlet 用来接收SpringMVC所有请求的servlet程序,会注册到ServletContext中。
1.2 配置applicationContext.xml
主要扫描业务类,AOP切面配置,事务配置,数据源配置等
<!--扫描包注解 不扫描@controller-->
<context:component-scan base-package="com.wangnian">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
1.3 配置springmvc.xml
主要扫描Controller,拦截器,视图转换等
<!--扫描包注解 只扫描@Controller-->
<context:component-scan base-package="com.wangnian.controller" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
1.4 启动大概流程
在启动Servlet容器,会去读取web.xml配置文件注册Servlet,然后异步执行ServletContextListener的contextInitialized方法读取用户自定义的xml配置文件并创建bean,刷新Spring上下文。
2.SpringMvc 另外一种配置
2.1 怎么注册DispatcherServlet ?
猜想1:也是xml配置方式。但是Spring官网都把零xml的配置当成一种优势,那显然不科学。
猜想2:@WebServlet。我们找找DispatcherServlet这个类?居然没有@WebServlet注解
那只能看看SpringMvc的文档&#x