SpringBoot学习笔记【part01】基础入门

SpringBoot 学习笔记 Part01

1. SpringBoot快速入门

SpringBoot能快速创建出生产级别的Spring应用,学习SpringBoot我们需要用到它的官方文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/

SpringBoot的系统要求是 Java 8、Maven 3.3+。

接下来我们先进行maven的一些配置,在maven的settings.xml里添加阿里云镜像,能让我们更快地下载所用的包,并设置编译版本,避免一些不必要的错误。

<mirrors>
    <mirror>
        <id>nexus-aliyunid>
        <mirrorOf>centralmirrorOf>
        <name>Nexus aliyunname>
        <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    mirror>
mirrors>

<profiles>
    <profile>
        <id>jdk-1.8id>
        <activation>
            <activeByDefault>trueactiveByDefault>
            <jdk>1.8jdk>
        activation>
        <properties>
            <maven.compiler.source>1.8maven.compiler.source>
            <maven.compiler.target>1.8maven.compiler.target>
            <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
        properties>
    profile>
profiles>

入门案例需求:浏览网页时发送/hello请求,响应 Hello Spring Boot 2 !

1.1 创建maven工程,并引入依赖

导入父工程(固定写法),导入开发web场景的依赖。

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.3.4.RELEASEversion>
parent>


<dependencies>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
dependencies>

1.2 创建主程序

@SpringBootApplication:向Spring表明这是一个SpringBoot应用,启动这个main方法即可启用SpringBoot应用并开启服务器,不用再自己手动配置Tomcat了。

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

1.3 编写业务

@RestController:这是@Controller、@ResponseBody等注解的结合体,声明这是啥一个Controller类并返回值不再是个地址给地址解析器而是直接输出到页面上。具体可以观察其源码。

@RestController
public class HelloController {

    @RequestMapping("hello")
    public String handle01(){
        return "Hello SpringBoot 2 !";
    }
}

到此直接运行main方法即可开启服务器进行入门程序的测试了。

2. 简化配置

SpringBoot为我们准备了一个统一的配置文件application.properties,所有配置都可以在这里更改(tomcat、springmvc等),不更改的话都是用的SpringBoot的默认配置,在官方文档中可以查看到。

例如,我们可以修改tomcat服务器的端口号为8888。

server.port=8888

3. 简化部署

加入插件后,用maven-clean、maven-package把项目打成jar包。

<build>
     <plugins>
         <plugin>
             <groupId>org.springframework.bootgroupId>
             <artifactId>spring-boot-maven-pluginartifactId>
         plugin>
     plugins>
build>

SpringBoot学习笔记【part01】基础入门_第1张图片

jar包在target文件夹里可以找到,可以通过cmd直接在目标服务器执行(注意,要取消cmd的快速编辑模式)。

SpringBoot学习笔记【part01】基础入门_第2张图片

4. 依赖管理特性

父项目做依赖管理:

导入的父项目。

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.3.4.RELEASEversion>
parent>

ctrl+左键 进入父项目的父项目。

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-dependenciesartifactId>
    <version>2.3.4.RELEASEversion>
parent>

ctrl+左键 进入依赖管理。在此springboot几乎声明了所有开发中常用的依赖的版本号。

SpringBoot学习笔记【part01】基础入门_第3张图片

这是springboot的自动版本仲裁机制,因此我们引入依赖默认都可以不写版本,但引入非版本仲裁的jar仍需要写版本号。

若需要使用其他版本的jar包,我们也可以修改默认版本号。

  1. 查看spring-boot-dependencies里面规定当前依赖的版本用的标签名
  2. 在当前项目的pom.xml里重写配置
<properties>
    <mysql.version>5.1.43mysql.version>
properties>

5. starter场景启动器

我们见过很多 spring-boot-starter-* ,其中 * 表示的就是某种场景,比如batch、jdbc等。只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。当我们用springboot进行web开发时引入的场景启动器如下:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

SpringBoot所有支持的官方场景:
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter

我们也可以使用第三方制作的场景启动器,比如我们见到的 *-spring-boot-starter 的命名格式,就是第三方为我们提供的简化开发的场景启动器。

所有场景启动器最底层的依赖都是基于如下:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starterartifactId>
    <version>2.3.4.RELEASEversion>
    <scope>compilescope>
dependency>

6. 自动配置

以上4、5点为自动配置的一些原理,现在来进一步介绍springboot的自动配置。

  1. springboot为我们自动配好了tomcat。

    ​ 自动为我们引入了tomcat的依赖,且自动配置好了tomcat。

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-tomcatartifactId>
        <version>2.3.4.RELEASEversion>
        <scope>compilescope>
    dependency>
    
  2. springboot为我们自动配好了springmvc。

    自动引入SpringMVC全套组件,且自动配好了springmvc的常用功能,如:DispatcherServlet、字符编码过滤器CharacterEncodingFilter、视图解析器ViewResolver、文件上传解析器MultipartResolver。

  3. springboot为我们自动配好了一些web常用的功能。

    ​springboot为我们自动解决了一些问题,如:字符编码问题
    springboot也帮我们配置好了所有web开发的常见场景,如:文件上传

我们可以通过获取IoC容器来看看springboot为我们具体准备了哪些组件。

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
    }
}

6.1 默认的包结构

之前,我们需要手动进行xml配置指定需要扫描的包。而现在,主程序所在包及其下面的所有子包里面的组件都会被默认被springboot扫描进来,无需以前的扫描配置。

想要改变路径,可在**@SpringBootApplication**注解中加入属性scanBasePackages。

@SpringBootApplication(scanBasePackages="com.swz")

或者用老方法**@ComponentScan**来指定扫描路径。

@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.swz.boot")

6.2 各种配置的默认值

springboot的统一配置文件application.properties里的各种配置都拥有默认值,如:

SpringBoot学习笔记【part01】基础入门_第4张图片

我们也可以对默认值进行修改。

spring.servlet.multipart.max-file-size=10MB

默认配置最终都是映射到某个类上,如:MultipartProperties。我们自己配置文件的值最终也会被绑定到每个类上,这个类会在容器中被创建对象。

6.3 springboot按需加载所有自动配置项

若我们的工程中有非常多的starter,引入了什么场景,那么这个的自动配置才会开启。Springboot所有的自动配置功能都在 spring-boot-autoconfigure这个包里。

例如,spring-boot-starter-web的父项目spring-boot-starter里就有一个spring-boot-autoconfigure包,里面都是用于自动配置的配置类(有许多报红的,是因为没有引入相关的场景,但由于springboot是按需加载的,只会使用那些我们引入且需要用到的配置类)。

SpringBoot学习笔记【part01】基础入门_第5张图片

你可能感兴趣的:(SpringBoot,spring,boot,java,spring)