SpringBoot和SpringMVC的区别
- 形式上:SpringBoot是一个自动化配置的工具;SpringMVC是一个web框架
- 在搭建项目时:SpringMVC需要手动配置xml文件,同时需要配置Tomcat服务器。而SpringBoot采用约定大于配置的方式,进行自动装配,同时内置服务器,打开就可以直接用
简述 Spring Boot Starter 的工作原理
SpringBoot核心就是几个注解:SpringBootConfiguration、EnableAutoConfiguration、ComponentScan,依赖这几个注解完成了所谓自动装配的功能,这个自动装配说简单点就是把你需要的Bean注入到Spring容器里面。(SpringBootApplication 启动类上的注解,只是简单的组合了SpringBootConfiguration、EnableAutoConfiguration、ComponentScan几个注解,避免开发者一个一个的去加)。
SpringBoot程序在启动过程中会解析SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三个注解:
- SpringBootConfiguration:包含了Configuration注解,实现配置文件
- ComponentScan:指定扫描范围
- EnableAutoConfiguration:通过源码可以知道,该注解使用Import引入了AutoConfigurationImportSelector类,而AutoConfigurationImportSelector类通过SpringFactortisLoader加载了所有jar包的MATE-INF文件夹下面的spring.factories文件,spring.factories包含了所有需要装配的XXXConfiguration类的全限定名。XXXConfiguration类包含了实例化该类需要的信息,比如说如果这是个数据源Configuration类,那么就应该有数据库驱动、用户名、密码等等信息。
总结:
SpringBoot并没有想象那么神秘,就是这么几件事情:
1.提供了一个配置类,该配置类定义了我们需要的对象的实例化过程;
2.提供了一个spring.factories文件,包含了配置类的全限定名;
3.将配置类和spring.factories文件打包为一个启动器starter;
4.程序启动时通过加载starter.jar包的spring.factories文件信息,然后通过反射实例化文件里面的类。
Spring Boot 在启动的时候会干这几件事情:
① Spring Boot 在启动时会去依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
② 根据 spring.factories 配置加载 AutoConfigure 类
③ 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context
其实就是 Spring Boot 在启动的时候,按照约定去读取 Spring Boot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 Spring Boot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。
springMVC常用基本组件
1.DispatcherServlet
是SpringMVC框架了里面的前端控制器
作用:统一处理用户发来的请求并和响应,相当于一个中间转换器,减少了各个组件之间的调度,减少的耦合性。
- HandlerMapping
是SpringMVC框架里面的处理器映射器
作用:根据请求发来的url 和method找到对应的Handler(就是说在一个用到SpringMVC框架的项目中会有好多方法和逻辑这个组件的作用就是找到对应的方法和组件返回给前端控制器)
3.Handler
是程序员自己创建的控制器
作用:就是程序员自己根据用户的要求写出的逻辑方法为用户提供提供服务(我理解的)
4.HandlerAdaper
是SpringMVC框架提供的 处理器适配器
作用:根据前端控制器传过来的Handler找到自己对用的控制器并执行
(我的理解就是处理器映射器找到对应的方法,但这些方法会需要一下特殊的配置或者参数这个组件作用就是提供并执行的)
5.ViewResolver
是SpringMVC框架提供的 视图解析器
作用:就是字如其名,就是用来将处理的结果解析成视图来展现给用户。视图解析器根据逻辑视图名解析成物理视图名,生成View视图对象,最后对视图进行渲染响应给用户。
6.View
是开发者自己提供的 视图
作用就是,根据model对象的要求来渲染 页面,然后但会给前端控器在相应给用户。
SpringMVC的基本流程
执行前;当一个请求发来时先进服务器(Tomcat),在服务器中会有拦截器,过滤器啊,等这些功能走完之后,才真正的进入了框架中。
1.用户发来一个请求,首先进入的是前端控制器DispatcherServlet
2.前端控制器将(DispacherServlet)用户发来的请求发送给处理器映射器(HandlerMapping)
3.处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。
4.处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)
5.控制器执行完成后,会返回一个ModelAndView对象给处理器适配器
6.处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式相应给用户)
7.前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过里的View对象解析成对应的页面对象,然后将页面对象和Model对象返回给前端控制器。
8.前端控制器再将返回回来的对象交给视图(View),视图根据传过来的Model对象再一次的对页面进行渲染,然后在返回给前端控制器。
9.前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。