SpringBoot

目录

文章代码环境

学习建议

概述

优点

快速构建一个SpringBoot项目

SpringBoot项目目录介绍

SpringBoot的配置文件的种类

 常用配置文件

 特定场景的配置文件

 配置文件的优先级

SpringBoot常用注解

SpringBoot热部署

什么是热部署?

热部署实践

SpringBoot自定义Starter

原理篇

 自动配置原理


文章代码环境

        JDK---17

        SpringBoot---3.3.1

        Maven---3.9.4

        IDE:IDEA

学习建议

        如果你正在学习JAVA后端开发,但还没有接触SpringBoot或只想快速构建一个SpringBoot项目,可以从"快速构建一个SpringBoot项目",开始学习.当然,在学习之前还是有一些前置知识需要学习,

例如:

        反射

        注解

        JAVAWeb基础(HTTP请求,响应,Tomcat等)

        Maven

 如果你正在为面试做准备,请从"概述"开始

        

概述

        Spring Boot 是由 Pivotal 团队开发的一款基于 Spring 框架的开源框架。

        Spring Boot 具有诸多重要的功能。最重要的则是简化配置,大幅减少繁琐的 XML 配置,依靠约定优于配置原则和自动配置机制,使开发者更专注于业务逻辑。能够快速创建并启动可运行的应用,显著提高开发效率。自带嵌入式的 Web 服务器,像 Tomcat、Jetty 等,无需额外部署到外部服务器。通过 starter 依赖可方便集成各种常用库和框架,比如数据库连接的 JDBC、MyBatis ,缓存的 Redis ,消息队列的 RabbitMQ、Kafka 等。还提供了应用运行状态的监控和健康检查功能,有助于及时发现和解决问题。能方便地集成安全框架,实现身份验证和授权等安全功能,并且支持多种数据访问方式,包括关系型数据库和 NoSQL 数据库等。

        Spring Boot 适用于多种应用场景,如构建微服务(将大型电商系统拆分为订单、库存、用户等服务)、快速开发高效的 Web 应用(包括企业级管理系统、博客平台、在线教育系统等)、为移动应用提供后端支持、构建数据处理和分析应用、创建供其他系统或应用调用的 API 服务,以及在云平台(如 AWS、Azure 等)上轻松部署和运行应用。

优点

简化配置,专注业务逻辑。

快速创建和启动应用,提高开发效率。

自带嵌入式 Web 服务器,无需额外部署。

方便集成各种常用库和框架。

提供监控和健康检查功能。

易于集成安全框架,实现安全功能。

支持多种数据访问方式。

快速构建一个SpringBoot项目

第一步:填写项目基本信息

第二步:添加依赖

第三步:刷新依赖

第四步:没有报错开始启动

第五步:测试服务器是否成功启动

SpringBoot项目目录介绍

SpringBoot的配置文件的种类

 常用配置文件

  application.properties

   格式:基于键值对(key=value)的简单文本文件。

   用途:用于配置应用程序的通用属性,如数据库连接、日志级别等。

   特点:语法简单,易于理解和使用,但不支持复杂的数据结构

spring.application.name=test_demo
server.port=8081

  application.yml / application.yaml

   格式:基于YAML格式,一种易于阅读和书写的数据序列化格式。

   用途:与application.properties类似,但支持更复杂的数据结构(如列表、映射等),且语法更简洁。

   特点:易于阅读和维护,特别是对于复杂的配置信息。

#应用名称
spring:
  application:
    name: test_demo
#应用端口号
server:
  port: 8081
 特定场景的配置文件

  bootstrap.properties / bootstrap.yml

   用途:主要用于Spring Cloud Config配置中心,用于配置连接到配置中心的属性。

   特点:这些配置文件在application配置文件之前加载,优先级更高,适用于需要预先加载配置的场景。

  application-{profile}.properties / application-{profile}.yml

   用途:用于配置特定环境的属性,其中{profile}可以是开发(dev)、测试(test)、生产(prod)等环境名称。

   特点:这些文件中的配置将覆盖application.properties和application.yml中的相应配置,以实现不同环境下的配置隔离。

  application.jar.properties / application.jar.yml

   用途:用于在JAR文件中运行的Spring Boot应用程序的配置文件类型。

   特点:这些配置文件在JAR包中提供配置信息,通常用于嵌入式部署场景。

 配置文件的优先级

   YAML > Properties > XML

SpringBoot常用注解

@SpringBootApplication:一个复合注解,由以下三个注解组成 用于标识 Spring Boot 应用的主类。

  @Configuration:表明该类是一个 Java 配置类,用于定义 Spring Bean 的配置信息。

  @EnableAutoConfiguration:自动配置注解,用于开启 Spring Boot 的自动配置功能。

  @ComponentScan:用于自动扫描和注册 Spring Bean。

@RestController:用于定义 RESTful 接口,相当于 @Controller 和 @ResponseBody 的组合。

@RequestMapping:用于定义 HTTP 请求的映射,用于处理 HTTP 请求。

@Autowired:自动注入注解,用于自动装配 Spring Bean。

@Value:属性注入注解,用于注入配置文件中的属性值。

SpringBoot热部署

什么是热部署?

Spring Boot 热部署是指在开发过程中,当对代码进行修改后,无需手动重新启动应用程序,就能使修改立即生效并反映在正在运行的应用中的一种技术特性。它大大提高了开发效率,减少了开发者在反复启动服务所消耗的时间.

热部署实践

我们这里采用最简单的方式实现(DevTools),热部署只是为了方便开发,在正式环境,打包时记得忽略

在pom.xml中的dependencies标签中引入以下依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <!--将optional设置为true是保证该依赖是可选的,避免依赖的传递性-->
</dependency>

添加好依赖后,刷新pom.xml并编辑配置文件,添加如下配置

#热部署
  devtools:
    restart:
      enable: true  #设置开启热部署,false即不开启热部署
      additional-paths: src/main/java #指定热部署的目录
      exclude: test/**  #指定目录不更新
      #解决静态资源不更新
      thymeleaf:
        cache: false #使用Thymeleaf模板引擎,关闭缓存#热部署

 当然还需要修改设置

(旧版本idea)按住快捷键:Shift+Ctrl+Alt+/ (idea旧版本,新版本该配置项换了位置,下面会讲)

(新版本idea)

然后重新启动IDE测试一下效果

SpringBoot自定义Starter

 可以说,SpringBoot配置简单是跟Starter分不开的,它将相关技术或功能所需的一组依赖打包在一起。开发者无需手动查找和添加每个单独的依赖,只需要引入对应的 Starter 依赖,就能方便地获得一组经过测试和兼容的依赖项,大大减少了依赖配置的复杂性和出错的可能性。

 如果你的项目有一些自定义的依赖或者固定的工具依赖,非常适合使用自定义Starter解决你的需求。如果你觉得自定义Starter难以理解,可以先看下面的自动配置原理。

 命名规范

  官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq;

  第三方我们自己的命名格式为 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter

  规范还是建议大家遵守,也有助于养成一个良好的代码设计风格

 自定义starter的步骤特别简单,需要创建两个模块,其中一个名字为{xxxx}-spring-boot-starter用于管理依赖,并一个模块则用于实现自动配置,名称为{xxxx}-spring-boot-autoconfi

首先创建两个模块(模块名的自定义部分可以根据自己的功能决定,我这里是时间格式转换)

为什么要创建两个模块?

因为一个用于实现自动配置,另一个用于依赖管理,官方的Starter就是这么做的,所以我们照着做.

引入依赖(这里看自己情况,需要什么依赖,就引入什么,下面的必须引入)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>3.3.1</version>
</dependency>

然后来制作我们的自动配置starter 

在自动配置模块中编写自动配置文件和自定义的功能,可以加上条件注解(@Conditional)增强代码的健壮性,我这里就不加了,不了解的朋友可以看一下这个博客)

深入探索Spring中的条件注解:提升配置的灵活性

我的自定义功能很简单

 编写需要自动配置的类的配置文件

这里我的springboot的版本很高,如果你这个报错了,可以将文件名变成sprfactories文件,然后在文件里加上自动配置类的全类名

然后在starter这个模块的依赖管理文件中 引入自己的自动配置依赖

然后再起一个模块,测试一下自己定义的starter

 

文件名:org.springframework.boot.autoconfigure.AutoConfiguration.imports

原理篇

 自动配置原理

当然SpringBoot的自动配置原理是个很大的问题,这篇文章的深度很有限

第一步,当点击SpringBoot工程的启动按钮,SpringBoot会注册源配置类(@SpringBootApplication)并递归加载所有配置类。

第二步,根据ComponentScan和Import注解扫描包及加载配置类,使用Import注解导入ImportSelector选择器。

第三步,调用selectImports()使用SpringFactories机制实现AutoConfigurationImportSelector达到开箱即用的效果。

  具体的实现步骤如下:

 通过SpringFactories机制加载配置文件:通过ClassLoader获取classpath中的配置文件META-INF/spring.factories

 找出所有的自动配置类:在所有的配置文件的META-INF/spring.factories中,筛选出以EnableAutoConfiguration.class为key的,符合条件的配置类(注意这个地方不同的版本配置文件名字不一样)

 根据条件注解过滤掉不必要的自动配置类:通过@Conditional

@Conditional是一个来自Spring的注解

 ——作用:只有当特定条件满足时,才会向IOC容器中注册指定的组件

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值