Spring,SpringMVC,SpringBoot

三者的核心点不会变,IOC容器:将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等

 

Spring MVC是Spring的一部分

Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC框架(一些用Spring 解耦的组件),主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易,一个典型的Spring MVC应用开发分为下面几步:
首先通过配置文件声明Dispatcher Servlet:
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>com.qgd.oms.web.common.mvc.OmsDispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

通过配置文件声明servlet详情,如MVC resource,data source,bean等

若需添加其它功能,如security,则需添加对应配置

我们通过增加业务代码,如controller,service,model等,最后生成war包,通过容器进行启动

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
SpringMVC流程:

1、用户发送请求到前端控制器(DispatcherServlet)。
2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。
3、找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。
4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。
5、处理器适配器去执行Handler。
6、处理器执行完给处理器适配器返回ModelAndView。
7、处理器适配器向前端控制器返回ModelAndView。
8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。
9、视图解析器向前端控制器返回View。
10、前端控制器对视图进行渲染。
11、前端控制器向用户响应结果。

SpringMVC的启动流程

https://juejin.im/post/5b207dc86fb9a01e49294f42

Servlet生命周期:

(1)加载和实例化:当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。

(2) 初始化:实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。

(3)服务:初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。

(4)销毁:当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

 

SpringBoot:实现自动配置,降低项目搭建的复杂度

//引入spring-boot-starter-web依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
//声明Spring Boot应用,直接写业务逻辑即可
@Controller
@SpringBootApplication
public class MockServerApplication {
    @RequestMapping("/hi")
    @ResponseBody
    String home() {
        return "how are you!";
    }

    public static void main(String[] args) {
        SpringApplication.run(MockServerApplication.class, args);
    }
}
你甚至都不用额外的WEB容器,直接生成jar包执行即可,因为spring-boot-starter-web模块中包含有一个内置tomcat,可以直接提供容器使用(只需要这一个starters就可以运行一个spring应用了);基于Spring Boot,不是说原来的配置没有了,而是Spring Boot有一套默认配置,我们可以把它看做比较通用的约定,而Spring Boot遵循的也是约定优于配置原则,同时,如果你需要使用到Spring以往提供的各种复杂但功能强大的配置功能,Spring Boot一样支持。
 提供的“starters”poms来简化Maven配置。
 尽可能自动配置spring应用。

实际使用中:

当我们使用其他框架时,在pom文件添加相应的配置,通过maven自动导入pom中的相应依赖。在启动SpringBoot应用的时候会自动扫描Maven Dependencies下面的starter包,把相应的bean加载到我们的IOC容器中。所有的自动配置逻辑都在spring-boot-autoconfigure.jar中实现。
SpringBoot更适合构建Restful风格的接口。
通过Spring-boot拆分服务构建微服务。
Spring-boot应用可以直接打包成jar包,通过java -jar就可以运行
 
 

Spring,SpringMVC,SpringBoot三者区别?

Spring提供了核心的功能IOC,AOP,spring MVC是基于 Spring 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐,我们也需要配置组件扫描,调度器servlet,视图解析器等。SpringBoot更像一种解决方案(是基于Spring的快速开发整合包),它使我们在使用各种框架时配置更少(在一个jar包被添加到应用程序时,我们是否可以自动配置一些bean),降低了项目搭建的难度,同时也使我们的部署变得简单,提供嵌入式容器支持,使用命令java -jar独立运行jar,在外部容器中部署时,可以选择排除依赖关系以避免潜在的jar冲突。
posted @ 2019-06-25 09:53  LeeJuly  阅读(149)  评论(0)    收藏  举报