当前位置: 首页>编程语言>正文

springmvc接口形参可以用多个对象吗 springmvc面向接口编程

与之相对的就是基于编程(写代码)的方式启动,流行于前几年的SSM(Spring、SpringMVC、MyBatis)中。当然也算传统的。

在上一篇中讲到,通过一个“小桥式”的接口ServletContainerInitializer(Servlet容器初始化器)把Tomcat的启动和初始化进程带到了SpringMVC里。

在这个“桥式”接口上可以指定“感兴趣”的类或接口,SpringMVC指定的是WebApplicationInitializer(Web应用初始化器)接口,意图已经很明显,就是通过这个初始化器接口来完成SpringMVC应用的启动和初始化。

我们先来看下这个初始化接口,如下图01:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_面试,第1张

它只有一个onStartup方法,方法只有一个参数就是ServletContext,这个ServletContext由Tomcat创建好后提供给SpringMVC,SpringMVC在启动过程中调用这个onStartup方法,在这个方法内完成自身的创建和初始化,还要把Servlet和Filter等注册到ServletContext里。

这些工作都是SpringMVC要做的,而不是我们要做的,所以SpringMVC肯定已经实现了这个接口,我们查看下类型信息,如下图02:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_面试_02,第2张

我们发现了一个看着很重要的类,就是:

AbstractAnnotationConfigDispatcherServletInitializer

可惜这个类是抽象的,肯定是不能直接用的,但是它里面已经包含了刚刚上面提到的所有完整的启动逻辑过程。

如果你对SSM很熟悉或Spring的官方文档看的很熟悉的话,你一定知道这个类是怎么用的。是的,我们需要定义一个类来继承它即可。

先看下官方文档上给的用法,如下图03:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_MVC_03,第3张

继承之后,我们需要提供三方面信息,一个是用于注册到根容器中的类,一个是用于注册到Servlet容器中的类,一个是核心Servlet的映射URL。

注意,这里说的容器指的是Spring的ApplicationContext这个容器,其中根容器和Servlet容器是父子关系,且在SpringMVC中核心Servlet映射的URL必须是“/”。

下面给出一个我在几年前为公司搭建框架时的代码,如下图04:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_后端_04,第4张

这就是以编程的方式来完成SpringMVC的启动。我们自己定义的这个类就是前文提到的“感兴趣”的类。

这个类是不用(或不能)向Spring容器注册的,因为这个类是感兴趣的类,所以Tomcat会从jar包里把它找出来,这样SpringMVC就拿到了我们定义的这个类。

其实最主要的是这时候根本还没有Spring容器呢,哈哈,因为Spring容器就是在这个类里才创建出来的,有点意思吧。

其实这个类里包含的内容非常多,我们都可以使用写代码的方式来进行配置。下面举几个示例。

比如对核心Servlet的一些定制化设置,如下图05:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_MVC_05,第5张

比如可以加进去一些自己需要的过滤器,如下图06:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_后端_06,第6张

比如可以对文件上传进行一些配置,如下图07:

springmvc接口形参可以用多个对象吗 springmvc面向接口编程,springmvc接口形参可以用多个对象吗 springmvc面向接口编程_面试_07,第7张


https://www.xamrdz.com/lan/5bs1963246.html

相关文章: