SpringBoot详解

本文详细介绍了SpringBoot,从微服务概念出发,逐步讲解如何创建第一个SpringBoot程序,包括配置文件的应用、yaml基础语法、自动配置原理以及SpringBoot的web开发。还深入探讨了SpringBoot连接数据库、数据校验、整合Druid数据源、Mybatis,以及安全框架SpringSecurity和Shiro的使用。通过本文,读者将全面了解SpringBoot的核心特性和实际应用。
摘要由CSDN通过智能技术生成

SpringBoot详解

1、简介

什么是Spring

Spring是一个开源的框架,主要是用来简化开发流程

Spring是如何简化Java开发

  • 基于POJO的轻量级和最小侵入性编程
  • 通过IOC,依赖注入(DI)和面向接口实现松耦合
  • 基于切面(AOP)和惯例进行声明式编程
  • 通过切面和模板减少样式的代码

1.1、微服务

微服务是一种架构,他要求我们在开发应用的时候,这个应用必须构建成一系列小服务的组合:可以通过Http(rpc)的方式进行互通。

2、第一个SpringBoot程序

环境的依赖 java1.8、maven3.6.1,SpringBoot:最新版 IDEA

@RestController
public class Hello {

    @RequestMapping("/hello")
    public String getHello(){
        return "Hello SpringBoot";
    }
}

pom.xml

  • spring-boot-dependencies:核心依赖在父工程里面
  • 我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本

启动器

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 启动器:说白了就是SpringBoot启动的场景
  • 比如Spring-boot-srarter-web,他会帮助我们自动导入web环境所有的依赖
  • SpringBoot会将所有的功能场景,都变成一个个的启动器
  • 我们需要使用的功能,只需要找到他们的启动器便可以进行使用

主程序

@SpringBootApplication //标注这个类是一个Spring Boot类
public class DemoApplication {

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

}

常见的注解

@SpringBootConfiguration :表示Spring Boot的配置
    @Configuration:表是Spring的配置类
    @Component:说明这也是一个Spring的组件
    
@EnableAutoConfiguration:表示自动配置
    @AutoConfigurationPackage:自动配置包
    @Import(AutoConfigurationPackageRegistrar.class):自动配置包注册
    @Import(AutoConfigurationImportSelector.class):自动导入选择

结论:springBoot所有自动配置都是在启动的时候扫描并加载,Spring.factories所有的自动配置类都在这里面,但是不一定失效,要判断条件四否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效。然后就是配置成功!

  1. springBoot在启动的时候,从类路径下/META-INF/spring.factories获取指定值;
  2. 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
  3. spring boot现在将自动配置文件
  4. 整合jaavEE,解决方案和自动配置的东西都在spring-boot-autorconfigure-2.20.RELEASE.jar这个包下
  5. 他会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
  6. 容器中也会存在非常多的xxxautoConfiguration的文件,就是这些类给容器中导入这个场景所需要的组件并进行自动的配置,@Configuration ,javaConfig!
  7. 有了自动配置类,免去了手动编写配置文件的工作

SpringBoot谈谈自己的理解

  • 自动装配
  • run()方法,其所作的事情
    • 推断应用的类型是普通的项目还是web项目
    • 查找并加载所有可用的初始化器,设置到initializers属性中
    • 找出所有的应用程序监听器,设置到listeners属性中
    • 推断并设置main方法的定义类,找到运行的主类

3、给属性赋值的集中方式

3.1、配置文件

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties
    • 语法结构 :key=value
  • application.yml
    • 语法结构 :key:空格 value

**配置文件的作用 :**修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!

3.2、yaml概述

YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)

*这种语言以数据***作**为中心,而不是以标记语言为重点!

以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml

传统xml配置:

<server>
    <port>8081<port>
</server>

yaml配置:

server:
  prot: 8080

3.3、yaml基础语法

注:yaml的语法要求十分严格,必须按照其中的规范进行编写

  1. 空格不能省略
  2. 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的
  3. 属性和值的大小写都是十分的敏感的

字面量:普通的值[数字、布尔值、字符串]

字面量直接写在后面的可以,字符串默认不用加上双引号或者是单引号

K:v

注意:

  • ""双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思

    例:name: “kuang shen” 输出 :kuang 换行 shen

  • ‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

    例:name: ‘kuang shen’ 输出 :kuang shen

对象、map(键值对)

#对象、map格式
k:
	v1:
	v2:


#注:在使用的配置文件是yaml时,空格一定不能省略
student:
	name: lisi
	age: 3

行内写法

student: {name: lisi,age: 3}

数组

pets:
	- cat
	- dog
	- pig

行内的写法

server:
	port: 8081

yaml文件的强大在于,它可以给我们的实体类直接注入匹配的值

4、Spring boot的配置

yaml可以直接给实体类进行赋值

image-20211123194628381

报红解决的办法

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

image-20211123200908758

在pom.xml文件中添加上述的依赖

image-20211123195434711

@ConfigurationProperties(prefix = “person”)的作用

  • 将配置文件中配置的每一个属性的值,映射到组件之中;

  • 告诉Springboot将本类中的所有属性和配置文件相关的配置进行绑定

  • 参数prefix=”person“:将配置文件中person下面所有的属性一一对应

  • 只有这个组件时容器中的组件,才能使用容器提供的ConfigurationProperties功能

yaml与properties的比较

image-20211123200956811

  • 松散绑定:指的是在yaml中的属性的名称可以与实体类中的属性名称不是完全的一样,但是也可以对其进行赋值
  • JSR303数据校验,这个是我们可以在字段是增加一层过滤器,来保证数据的合法性
  • 复杂类型的封装,yaml中可以封装对象,使用@value就不支持

结论

  1. 配置yaml课配置properties都可以获取到值
  2. 如果我们在某个业务中,只需要配置文件中的某个值的时候我们可以考虑曹勇value
  3. 如果说,我们专门编写了一个javaBean来和配置文件进行映射,就直接使用@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值