• 笔记:SpringBoot教程快速入门-基础-SpringBoot简介&快速入门案例(一)


    前置知识
    1、你需要java基础的知识
    2、你需要Spring、SpringMVC、Mybatis框架的知识

    1. Spring Boot概述

    1.1 Spring Boot 概念

      我们知道Spring家族有Spring Boot、Spring Framework、Spring Data、Spring Cloud、Spring Security等成员,而Spring Boot作为Spring家族最优秀的项目之一占有举足轻重的地位。2014年4月Spring Boot 1.0.0发布,她提供了一种快速使用Spring的方式,基于约定大约配置(约定俗成)的思想大大简化了Spring原有的繁琐的配置,从而提高开发效率。由此可见其实Spring Boot提供了一种快速使用Spring的方式,而非对Spring原有功能的一个增强。
      当然Spring Boot出现不仅仅是简化了配置,我们知道Spring本身有两个弊病,一则Spring配置繁琐,其次各个模块(包)之前的依赖同样繁琐,所有的包由开发人员手动进行管理,因此每当我们导入一个新的坐标,就需要考量这个包的依赖关系以及版本的管理,一旦出现版本不匹配而导致的兼容问题会严重影响项目的开发进度,以及可能给项目埋下未知的安全隐患。

    1.1 Spring Boot 特点

      Spring Boot为了解决Spring上述的问题做了以下几个点的努力:

    • 自动配置-Spring Boot在Spring Boot启动时根据各方面的因素决定加载哪些模块,不加载哪些模块;(后续高级课程会专门探讨自动配置的实现机制);
    • 起步依赖-为了解决依赖的问题,Spring Boot将具备某种功能的坐标打包到一起,并且提供一些默认的功能,这样就解决了不同的包之前依赖和版本的问题;
    • 辅助功能-除以上两点外Spring Boot为了方面开发人员,提供了一些大型项目中常用但是非功能性的特性,比如嵌入式服务器、安全、指标、健康监测、外部配置等。

    2. SpringBoot快速入门

    2.1 需求

      搭建Spring Boot工程,定义HelloController控制器,并在该控制器下定义hello()方法,返回“Hello Spring Boot!”。

    2.2 实现步骤

    1. 创建Maven项目
    2. 导入Spring Boot起步依赖
      在pom.xml文件中加入以下配置
      <!--springboot工程需要继承的父工程-->
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.1.8.RELEASE</version>
      </parent>
    
      <dependencies>
          <!--web开发的起步依赖-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      </dependencies>
    
    1. 定义Controller
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
    
      @RestController
      public class HelloController {
    
          @RequestMapping("/hello")
          public String hello() {
              return "Hello Spring Boot!";
          }
      }
    
    1. 编写引导类
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.context.ConfigurableApplicationContext;
    
      /**
       * 引导类。 SpringBoot项目的入口
       */
      @SpringBootApplication
      public class HelloApplication {
    
          public static void main(String[] args) {
              ConfigurableApplicationContext context = SpringApplication.run(HelloApplication.class, args);
          }
      }
    
    
    1. 启动测试
      运行HelloApplication的main方法即可
    2021-09-21 17:25:28.542  INFO 14916 --- [           main] cn.hpy.HelloApplication                  : Starting HelloApplication on lenovoE560 with PID 14916 (F:6-codejavaspringbootspringboot-helloworld	argetclasses started by hpy in F:6-codejavaspringboot)
    2021-09-21 17:25:28.553  INFO 14916 --- [           main] cn.hpy.HelloApplication                  : No active profile set, falling back to default profiles: default
    2021-09-21 17:25:30.900  INFO 14916 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2021-09-21 17:25:30.952  INFO 14916 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2021-09-21 17:25:30.953  INFO 14916 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
    2021-09-21 17:25:31.361  INFO 14916 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2021-09-21 17:25:31.362  INFO 14916 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2741 ms
    2021-09-21 17:25:31.918  INFO 14916 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
    2021-09-21 17:25:32.167  INFO 14916 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
    2021-09-21 17:25:32.173  INFO 14916 --- [           main] cn.hpy.HelloApplication                  : Started HelloApplication in 4.389 seconds (JVM running for 8.277)
    
    

      以上为运行结果,可以通过Tomcat started on port(s): 8080 (http) with context path ''看出,Spring Boot使用内置的Tomcat启动的8080默认端口,接下来我们直接访问 http://localhost:8080/hello 就可以看到浏览器输出Hello Spring Boot!字符串了。

    2.3 Spring Boot 快速入门小结

    • Spring Boot使用JAR的打包方式运行项目
    • Spring Boot的引导类是项目的入口,运行main方法就可以启动项目;
    • 不论使用Spring Boot或Spring构建项目业务代码编写的方式其实是一样的。

    3. Spring Boot起步依赖原理分析

    3.1 POM文件分析

    spring-boot-starter-parent继承自spring-boot-dependencies,下面我们来看一下spring-boot-dependencies的部分定义:

    ...
    <properties>
    ...
    <elasticsearch.version>6.4.3</elasticsearch.version>
    ...
    </properties>
    
    <dependencyManagement>
      ...
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
          <version>2.1.8.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.elasticsearch</groupId>
          <artifactId>elasticsearch</artifactId>
          <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
          <groupId>org.elasticsearch.client</groupId>
          <artifactId>elasticsearch-rest-client</artifactId>
          <version>${elasticsearch.version}</version>
          <exclusions>
            <exclusion>
              <artifactId>commons-logging</artifactId>
              <groupId>commons-logging</groupId>
            </exclusion>
          </exclusions>
        </dependency>
      </dependencies>
      ...
    </dependencyManagement>
    
    

      不难看出Spring Boot 通过properties定义好了elaticsearch的版本号,在dependencyManagement标签中引用properties已经定义好的版本号达到版本锁定的目的。同时用exclusions标签排除掉Spring Boot已经依赖的包commons-logging(Spring Boot默认日志框架),保持包的唯一性。而spring-boot-starter-data-elasticsearch是Spring Boot为elasticsearch定义的starter目的是在IOC容器中按需加载elaticsearch。(后续章节会详细讲解)

    3.2 小结

    • 在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本;
    • 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程;
    • 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题。

    引申思考:Spring Boot既然如此好用那么我们还有必要用Spring来构建项目吗?如果有必要是在哪种场景下面呢?有Spring支持但是Spring Boot却不支持的功能吗?

    参考文献
    spring boot
    视频教程

    本文来自博客园,作者:AfreadHuang,转载请注明原文链接:https://www.cnblogs.com/simple-blog/p/15317049.html

  • 相关阅读:
    PHP str_replace() 函数
    PHP str_pad() 函数
    查看带有A-TIME的执行计划
    B. Recursive Queries 打表
    [AHOI2013]作业 莫队 树状数组
    SP1487 PT07J
    SP10628 COT
    洛谷P1494 [国家集训队]小Z的袜子
    [SDOI2013]森林 主席树 启发式合并
    [CQOI2015]任务查询系统 主席树_差分
  • 原文地址:https://www.cnblogs.com/simple-blog/p/15317049.html
Copyright © 2020-2023  润新知