SpringBoot快速入门(一)

本文介绍了SpringBoot的基本概念、核心功能及优势,包括独立运行、内嵌Servlet容器、自动配置、监控和无XML配置。通过实例展示了创建SpringBoot项目的过程,以及配置文件的使用,包括application.properties和YAML的配置方式。此外,还讲解了@SpringBootApplication注解的含义和配置属性的类型安全绑定。
摘要由CSDN通过智能技术生成

一、SpringBoot概述

1、什么是SpringBoot?

Spring作为一个轻量级的容器,在javaEE开发中得到了广泛的应用,但是Spring的配置繁琐臃肿,在和各种第三方框架进行整合时代码量非常庞大,并且整合的代码大多是重复的,为了使开发者能够快速上手Spring,利用Spring框架快速搭建javaEE项目,SpringBoot应运而生。

SpringBoot带来了全新的自动化配置解决方案,使用SpringBoot可以快速创建基于Spring生产级的独立应用程序。SpringBoot中对一些常用的第三方库提供了默认的自动化配置方案,使得开发者只需要很少的Spring配置就能运行一个完整的javaEE应用。SpringBoot项目可以采用传统的方案打成war包,然后部署到Tomcat中运行,也可以直接打成可执行jar包,这样通过java -jar命令就可以启动一个SpringBoot项目。

2、SpringBoot的核心功能

(1)独立运行的 spring 项目: Spring Boot 可以以 jar 包形式直接运行,如 java -jar xxx.jar 优点是:节省服务器资源 (2)内嵌 servlet 容器: Spring Boot 可以选择内嵌 Tomcat,Jetty,这样我们无须以 war 包形式部署项目。 (3)提供 starter 简化 Maven 配置: 在 Spring Boot 项目中为我们提供了很多的 spring-boot-starter-xxx 的项目(我们把这个依赖可以称之为起步依赖,我们导入指定的这些项目的坐标,就会自动导入和该模块相关的依赖包:例如我们后期再使用 Spring Boot 进行 web 开发我们就需要导入 spring-boot-starter-web 这个项目的依赖,导入这个依赖以后!那么Spring Boot 就会自动导入 web 开发所需要的其他的依赖包。

(4)自动配置 spring: Spring Boot 会根据在类路径中的 jar 包,类,为 jar 包里的类自动配置 Bean,这样会极大减少我们要使用的配置。当然 Spring Boot 只考虑了大部分开发场景,并不是所有的场景,如果在实际的开发中我们需要自动配置 Bean,而 Spring Boot 不能满足,则可以自定义自动配置。 (5)准生产的应用监控: Spring Boot 提供基于 http,ssh,telnet 对运行时的项目进行监控。 (6)无代码生成和 xml 配置: Spring Boot 大量使用 spring4.x 提供的注解新特性来实现无代码生成和 xml 配置。spring4.x 提倡使用 Java配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 spring 的所有配置。

3、SpringBoot的优点

优点 (1)快速构建项目 (2)对主流框架无缝集成 (3)项目可以独立运行,无需依赖外部 servlet 容器 (4)提供运行时的应用监控 (5)极大提高了开发,部署效率

二、SpringBoot入门案例

1、新建SpringBoot项目

点击下一步:

2、pom.xml文件

<?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>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!--项目信息-->
    <groupId>com.kkb</groupId>
    <artifactId>springbootdemo01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbootdemo01</name>
    <description>Demo project for Spring Boot</description>

    <!--java的版本-->
    <properties>
        <java.version>11</java.version>
    </properties>

    <!--依赖管理-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

3、开发controller

注意:Controller的包一定在当前包的子包下
示例图:

代码:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String method(){
        return "SpringBoot 你好 我爱你";
    }

}

代码解释:

@RestController相当于@@ResponseBody和@Controller

运行结果图:

三、SpringBoot基本配置

1、spring-boot-starter-parent

1.1 spring-boot-starter-parent

SpringBoot提供了一个名为spring-boot-starter-parent的构件,里面已经对各种常用依赖(并非全部)的版本进 行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

直接使用spring-boot-starter-parent很方便,但是在公司里如果使用自己的parent如果此时还需要依赖版本统一管理,就需要使用dependencyManagement来实现。添加到pom.xml文件中

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.4.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

java版本、编码格式等都需要开发者手动配置。java版本的配置很简单,添加一个plugin即可:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

编码格式,如果使用maven创建SpringBoot项目,需要在pom.xml文件中添加如下配置:

<properties>
    <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
</properties>

1.2 @SpringBootApplication

主程序:

@SpringBootApplication  // 来标注一个主程序类,说明这是一个springboot应用
public class Springbootdemo01Application {

    public static void main(String[] args) {
    	// spring应用启动起来
        SpringApplication.run(Springbootdemo01Application.class, args);
    }

}

先来看一下@SpringBootApplication注解,现在来看一下源码

点击@SpringBootConfiguration进入

@SpringBootConfiguration其实就是一个@Configuration,所以功能为表明这是一个配置类,开发者可以在这个类中配置Bean。从这个角度来看,这个类扮演的角色类似于Spring中的applicationContext.xml文件的角色

@EnableAutoConfiguration表示开启自动化配置。SpringBoot中的自动化配置是非侵入式的,在任意时刻,开发者都可以使用自定义配置代替自动化配置中的某一个位置

@ComponentScan完成包扫描,也是Spring中的功能,由于@ComponentScan注解默认扫描的类都位于当前类所在包的下面,因此建议在实际项目开发中把项目启动类放在根包下

项目启动类中的ComponentScan注解,除了扫描@Service,@Repository,@Component,@Controller和RestController等之外,也会扫描@Configuration注解的类

可以自己写一个类加上@Configuration注解

2、启动图案banner

编写banner.txt放入resources文件夹下, 然后启动项目即可修改默认图案

提供编写banner生成的网址:

https://www.bootschool.net/ascii

3、Properties配置

SpringBoot中采用了大量的自动化配置,但是对开发者而言,在实际项目中不可避免会有一些需要自己手动配置,承载这些自定义配置的文件就是resources目录下的application.properties文件(可以使用YAML文件替换)

SpringBoot项目中的application.properties配置文件移动可以出现在如下4个位置:

  • 项目根目录下的config文件夹中

  • 项目根目录下

  • classpath下的config文件夹中

  • classpath下

如果这四个位置都有application.properties文件,那么加载的优先级从1到4依次降低,SpringBoot按照这个优先级查找配置信息,加载到SpringEnvironment中

4、类型安全配置属性

现在我们已经了解到无论是Properties配置还是YAML配置,最终都会被加载到SpringEnvironment中,Spring提供了@Value注解以及Environment Aware接口来将SpringEnvironment中的数据注入到属性上,SpringBoot对此进一步提出了类型安全配置属性,这样即使在数据量非常庞大的情况下,也可以方便的将配置文件中的数据注入到Bean中,如下所示:

将以上配置数据注入如下Bean中:

需要添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

代码解释:

  • @ConfigurationProperties中的prefix属性描述了要加载的配置文件的前缀

  • 如果配置文件是一个YAML文件,那么可以将数据注入一个集合中。

  • SpringBoot采用了一种宽松的规则来进行属性绑定,如果Bean中的属性名为authorName,那么配置文件中的属性可以是book.author_name、book.author-name、book.authorName或者book.AUTHORNAME

    注意:以上配置可能会出现乱码,需要对中文进行转码,如下图所示:

创建BookController进行简单测试:

运行结果图:

5、YAML配置

5.1 常规配置

YAML是JSON的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代application.properties。在创建一个SpringBoot项目时,引入的spring-boot-starter-web依赖间接地引入了snakeyaml依赖,snakeyaml会实现对yaml配置的解析。YAML的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。在SpringBoot项目中使用YAML只需要在resources目录下创建一个application.yaml文件即可,然后进行配置:

server:
  port: 80
  servlet:
    context-path: /book
  tomcat:
    uri-encoding: utf-8

以上配置等于application.properties中的如下配置:

server.port=80
server.servlet.context-path=/book
server.tomcat.uri-encoding-utf-8

此时可以将resources目录下的application.properties文件删除,完全使用YAML完成文件的配置

5.2 复杂配置

YAML不仅可以配置常规配置,也可以配置复杂属性,例如下面一组配置:

my:
  name: ajian
  address: China

新建实体类User:

@Component
@ConfigurationProperties(prefix = "my")
public class User {
    private String name;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

在Controller类中进行测试:

@RestController
public class BookController {

    @Autowired
    public Book book;

    @Autowired
    User user;

    @GetMapping("/book")
    public String bookMethod() {
        return book.toString();
    }

    @GetMapping("/user")
    public String UserMethod(){
        return user.toString();
    }

}

运行结果图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值