当前位置 博文首页 > SpringBoot入门及深入

    SpringBoot入门及深入

    作者:蚂蚁小哥 时间:2021-01-12 15:01

    一:SpringBoot简介

      当前互联网后端开发中,JavaEE占据了主导地位。对JavaEE开发,首选框架是Spring框架。在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使Spring框架运行起来,这点备受许多开发者诟病。随着Spring4.x发布,Spring已经完全脱离XML,只使用注解就可以运行项目。为了进一步简化Spring应用的开发,SpringBoot诞生了。它是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的搭建及开发过程,并迎合时下流行的分布式微服务设计思想,越来越多企业在使用SpringBoot

    1:设计初衷

      SpringBoot为我们开发者提供了一种更快速、体验更好的开发方式,我们可以开箱即用,无需像写Spring那样配置各种XML文件,虽然Spring3.0时引入了基于java的配置,但是编写这些配置无疑是在浪费大量时间,其实SpringBoot还内置Tomcat

    2:核心功能

    一:独立的运行Spring
        SpringBoot 可以以jar包形式独立运行,运行一个SpringBoot项目只需要通过java -jar xx.jar来运行
    二:内置Servlet容器
        Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目
    三:简化Maven配置
        SpringBoot提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web
    四:自动装配
        SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。
    当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot
    没有提供支持,则可以自定义自动配置 五:准生产的应用监控 SpringBoot提供基于http ssh telnet对运行时的项目进行监控 六:无代码生产和xml配置 SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性

    Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便

    3:本文开发环境需求

      SpringBoot 2.4.1正式发行版要求Java8并且兼容Java15;对应的Spring版本是5.3.2;而且要求Maven 3.3+ 但是最好使用3.5.4稳定版本,而Servlet容器的版本为Tomcat9.0(Servlet Version 4.0)、Jetty 9.4(Servlet Version 3.1)、Undertow 2.0(Servlet Version 4.0)  

     二:SpringBoot入门搭建

    1:手动搭建案例

      我们以一个简单的SpringBoot案例来突显出Spring的繁琐,我接下来将使用SpringBoot来实现一个简单的带Controller的案例

    第一步:使用IDEA构建一个普通的Maven项目
    第二步:在构建好的maven工程中对pom文件修改
    第三步:编写启动引导类
    第四步:编写Controller
    第五步:访问(默认8080端口) 以本案例http://localhost:8080/index/test
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!--
            在编写SpringBoot的项目时我们得继承SpringBoot的父POM文件,
            这一点和我们以前使用Spring导入的坐标不太一样,细心的会查看
            继承的父POM文件后发现SpringBoot为我们提前导入了大量的坐标,
            这就解决了我们平常导入坐标版本冲突问题
        -->
        <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.4.1</version>
        </parent>
    
        <groupId>org.example</groupId>
        <artifactId>demo0023</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!--
                要编写SpringMVC相关代码我们还得导入web的starter依赖
                SpringBoot为了我们导入的方便,把一系列的关于SpringMVC的坐标打包结合到了
                这个我下面导入的坐标里面
            -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>
    pom.xml里面添加相应坐标
    package cn.xw;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * 启动引导类
     */
    //加上此注解代表当前类就是SpringBoot启动类,否则就是普通类
    @SpringBootApplication
    public class SpringBoot5Application {
        //SpringBoot程序入口
        public static void main(String[] args) {
    
            //main函数里面的args参数是一个String数组,所以在main函数运行的
            //同时可以接收参数,接收过来的参数交给了SpringBoot,用于后期运行配置,后面介绍
            //第一个参数通过反射是告诉SpringBoot哪个是启动引导类
            //还有这个方法有个返回值,返回IOC容器
            SpringApplication.run(SpringBoot5Application.class, args);
        }
        /**
         * 注意:此类只会扫描加载当前包及其子包里面的全部类,然会把它们加载IOC容器中
         */
    }
    启动引导类编写
    package cn.xw.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController //结合@ResponseBody 和 @Controller 两注解
    @RequestMapping("/index")
    public class IndexController {
        @RequestMapping("/test")
        public String testMethod() {
            System.out.println("访问到此方法");
            return "Hello !!";
        }
    }
    Controller编写

    2:使用Spring Initializr快速搭建

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!--SpringBoot父POM坐标-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.1</version>
            <relativePath/>
        </parent>
        <groupId>cn.xw</groupId>
        <artifactId>springboot_test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot_test</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!--WEB开发Starter-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--SpringBoot的开发者工具-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <!--SpringBoot测试Starter-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <!--SpringBoot的Maven插件-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    自动创建的Maven坐标说明

    三:SpringBoot基本分析

    1:坐标中starters分析及依赖管理

      starter是依赖关系的整理和封装。是一套依赖坐标的整合,可以让导入应用开发的依赖坐标更方便。利用依赖传递的特性帮我们把一些列指定功能的坐标打包成了一个starter,我们只需要导入starter即可,无需导入大量坐标;每个Starter包含了当前功能下的许多必备依赖坐标这些依赖坐标是项目开发,上线和运行必须的。同时这些依赖也支持依赖传递。如下Starter:

    <!--导入WEB开发Starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>2.4.1</version>
          <scope>compile</scope>
        </dependency>
    
    下一篇:没有了