SpringBoot基础---新手上线(后期会持续更新,关注我!!!)小白++

SpringBoot基础

1、概念

1.1介绍

官网地址: https://spring.io/

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过

程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot致力于

在蓬勃发展的快速应用开发领域成为领导者。

2013年,Pivotal团队开始研发SpringBoot。2014年4月,发布全新开源的轻量级框架的第一个SpringBoot版本。

原博文:https://www.sohu.com/a/286995880_684445

1.2特点

为什么要学习SpringBoot?

SpringBoot是为了简化Spring应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性

让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的

搭建出一个 WEB 工程

未接触SpringBoot之前,搭建一个普通的WEB工程往往需要花费30分钟左右,如果遇到点奇葩的问题耽搁的

时间会更长一点,但自从用了SpringBoot后,真正体会到什么叫分分钟搭建一个WEB,让我拥有更多的时间

跟我的小伙伴们唠嗑了。使用SpringBoot后发现一切是如此的简单(还记得被JAR包,xml支配的恐惧吗,如

今都可以说 good bye)

在传统的一些框架中(SSH、SSM、Servlet/JSP) 虽然功能很强大但是配置起来太麻烦了,相比python或者

php ,Java就略显臃肿,主要问题集中在两点:

\1. 复杂的配置文件:

项目之间各种配置文件铺天盖地,在开发的过程中占用了大量的时间,并且需要做这些配置文件进行维护,

整个项目感觉特别复杂,并且Java代码和配置文件之间的切换开发,给程序人员带来很大的负担。

\1. 各种依赖比较混乱:

主要问题就是版本冲突,不同技术的版本需要我们知道哪些版本存在冲突问题,一旦使用错误就需要重新再

去下载库进行依赖。

而Spring Boot简化了基于Spring的应用开发,只需要一个”run”就创建了一个独立的、生产级别的Spring应

用,Spring boot为Spring平台及第三方提供了开箱即用的设置(默认设置的包就是启动器starter),这样我们

就可以简单的开始。Spring Boot主张,用最少的配置做更多的事。如果我们创建一个Java应用,并使用java

-jar启动,就能得到一个生产级别的web工程。

特点:

创建独立的 Spring 应用程序

直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)

提供自以为是的“入门”依赖项以简化您的构建配置

尽可能自动配置 Spring 和 3rd 方库

提供生产就绪功能,例如指标、运行状况检查和外部化配置

完全不需要代码生成,也不需要 XML 配置

SpringBoot = Spring+SpringMVC

2.构建SpringBoot项目

2.1 start.spring.io

2.2 Spring Initializr

创建项目

选择依赖

创建完成

2.3运行项目

点击选择启动项目

观察启动日志

2.4前后台交互

创建控制层

重启项目并访问

http://localhost:8080/example/show

输出:

至此前后台交互完成

2.5 目录结构

工程结构

pom文件

<?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.7.9</version>
        <relativePath/> 
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBoot</name>
    <description>SpringBoot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.6自定义banner

SpringBoot启动的时候我们可以看到如下内容,这一块其实是可以自定义的哦,而且在 2.X 版本中,它支持

的格式从文本扩展到banner.txt、banner.jpg、banner.gif、banner.jpeg等等,只需要在resouces
录下添加指定命名的文件即可,随后重启运行,即可

修改banner网址:https://www.bootschool.net/ascii-art (仅供参考)

2.7 查看SpringBoot默认提供的Bean

package com.its;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import java.util.Arrays;
@SpringBootApplication
public class HelloSpringBootApplication {
    
    
public static void main(String[] args) {
    
    
SpringApplication.run(HelloSpringBootApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
    
    
return args -> {
    
    
System.out.println("来看看 SpringBoot 默认为我们提供的 Bean:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
Arrays.stream(beanNames).forEach(System.out::println);
};
}
}

2.8 手动注入bean

//注入一个bean
@Bean
public Student student(){
    
    
return new Student("张三");
}

运行查看是否注入
控制层可以注解读取

2.9 初窥配置文件

从启动日志中可以发现,SpringBoot默认的端口是 8080 ,那么如果端口被占用了怎么办呢?不要慌,问题
不大,配置文件分分钟解决你的困扰…
application.properties

server.port= 8888

重启测试

2.10 关于starter

stater 参赛人、发令员
Spring Boot 中的starter 只是把我们某一模块,比如web 开发时所需要的所有JAR 包打包好给我们而已。不
过它的厉害之处在于,能自动把配置文件搞好,不用我们手动配置。
spring-boot-starter-web
spring-boot-starter-parent
这是 Spring Boot 的父级依赖,这样当前的项目就是 Spring Boot 项目了。spring-boot-starter-parent 是一
个特殊的 starter。
功能 1:默认依赖配置(绝对兼容)
它用来提供相关的 Maven 默认依赖。使用它之后,常用的包依赖可以省去 version 标签,当我们搭建web
应用的时候,
可以像下面这样添加spring-boot-starter-web依赖:

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

但是这种允许默认不填写版本号的依赖也必须是boot中默认给定的,如果没有默认给定,还是需要手动填写
的。
功能 2:默认环境配置(绝对兼容)
默认使用Java8,可添加以下配置修改版本
默认使用UTF-8编码,可添加以下配置修改编码
等…

<!-- 覆盖boot默认配置的基础信息 -->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

功能 3:资源过滤
识别默认配置文件

<resource>
<directory>${
    
    basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>

过滤打包内容(打包的时候把 src/main/resources 下所有文件都打包到包中)

<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>

3. YAML文件

在我们翻阅stater的过程中,也应该发现配置文件除了可是使用application*.properties类型,还可以使用后
缀为.yml或.yaml类型,这种类型相比properties类型支持了集合对象等数据,但是前提也必须是
application*才能被Spring扫描到。
YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语
言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这
种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

3.1 语法规则

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用Tab键,只允许使用空格。
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  5. 可以使用 “-小写字母” 或 "_小写字母"来 代替 “大写字母”,如 userName 与 user-name ,user_name 含
    义是一样的
  6. key: value 格式书写 key 后面跟着冒号,再后面跟着一个空格,然后是值
  7. 注释使用#

3.2 数据类型

YAML 支持的数据结构有三种

  1. 普通的值(数字,字符串,布尔)
  2. 对象、Map (属性和值) (键值对)
  3. 数组 (List、Set)

测试代码

#测试普通的值,注意字符串不用加单引号或者双引号
name: 张三
age: 12
#测试对象,对象还是k: v的方式 -- 注意缩进(不支持tab,使用空格)
stu:
name: 李四
age: 55
student:
studentName: 李四
student-age: 55
#测试数组,使用- 值表示数组中的一个元素
hobbies:
- 打篮球
- 羽毛球
- 踢足球
#组合形式 对象加数组
animal:
fly:
- 喜鹊
- 大雁
run:
- 犀牛
- 河马
#组合形式 数组加对象
clazz:
- {
    
    name: 翠花,age: 18}
- {
    
    name: 李四,age: 20}

读取配置文件

@Controller
@RequestMapping("/userController")
public class UserController {
    
    
@Value("${name}")
private String name;
@Value("${age}")
private String age;
@Value("${stu.name}")
private String stu;
@Value("${hobbies[0]}")
private String hobbies;
@Value("${animal.fly[0]}")
private String ob;
@Value("${clazz[1].name}")
private String ac;
@RequestMapping("/show")
public void show(){
    
    
System.out.println("基本类型:"+name+"-"+age);
System.out.println("对象中的值:"+stu);
System.out.println("数组中的值:"+hobbies);
System.out.println("对象中的数组:"+ob);
System.out.println("数组中的对象:"+ac);
}
}

关于直接获取数组类型
读取yml中配置的一个数组,通过@Vaule一直获取不到,通过一番资料的查询,才彻底清楚了@Vaule的使
用情况。
在Spring中读取配置文件的快捷方法常见的有两种,一个是通过@Vaule注解进行单一字段的注入,另外一种
方法就是通过@ConfigurationProperties注解来进行批量注入。
在这里插入图片描述

student:
name: 张三
age: 88
hobbies: #对象中包含数组
- 抽烟
- 喝酒
- 烫头

声明配置类

/**
* 配置类 对象的创建交给IOC
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "student")
public class StudentEntityDataConfig {
    
    
private String name;
private int age;
private String[] hobbies;
}

使用方法

@Autowired
private StudentEntityDataConfig studentEntityDataConfig;

猜你喜欢

转载自blog.csdn.net/weixin_52859229/article/details/129597430
今日推荐