Spring boot入门工程

springboot框架的设计目的是用来简化spring应用的初始搭建以及开发过程,
传统的web项目需要将程序打成war包,然后部署一个tomcat服务器才能运行,但是springboot程序集成了tomcat服务器,能够通过maven命令 mvn clean package打成jar包,只要将jar包下载到电脑然后 java -jar xxx.jar就能运行java程序
spring boot使得开发运行程序更加简单,程序启动更快,方便前端等非后端开发人员进行测试。
与spring相比,spring程序配置繁琐且依赖设置繁琐,而springboot程序能够实现自动配置和起步依赖(简化依赖配置),且集成了一些辅助功能例如内置tomcat服务器等
Springboot两大核心特性
一、我们知道 Spring Boot 能快速的搭建起一个应用,简化了大量的配置过程,这个原因就在于spring起步依赖的配置
以前我们开发一套spring程序需要进行非常多繁琐的配置:

  • 配置 pom.xml 添加 Spring 、 Spring MVC 框架的依赖,同时还需要考虑这* 些不同的框架的不同版本是否存在不兼容的问题
  • 配置 Web.xml,加载 Spring、Spring MVC
  • 配置 Spring
  • 配置 Spring MVC
  • 编写业务逻辑代码

而springboot开发一个web应用,只需要配置:

  • 配置 pom.xml 继承 Spring Boot 的 pom.xml ,添加 Web 起步依赖
  • 创建启动引导类,编写业务代码

在当下,微服务非常火热,一个应用包含了几十甚至几百个服务,如果每个服务都需要将各种配置继承到spring中,那么将多了非常多的重复工作。
解决这个问题的方法就是用springboot实现配置,其最大优点就是简化了配置工作,以前配置需要配置web、mvc、mysql等等各种以及对应版本冲突,但现在只需要导入一个 spring-boot-starter-web即可,这个名为web的起步依赖里面集成了许多基本的依赖并且都已经做好了版本管理。
下图是 spring-boot-starter-web内部的一部分常用依赖,这些依赖都已经集成好了

在使用springboot的起步依赖之前,我们只需要在pom.xml继承springboot的配置模板,即让pom.xml继承springboot的pom.xml,而springboot的pom.xml里面定义了常用的框架以及响应的版本号,无需考虑不同框架的不同版本的冲突问题且简化了pom.xml的配置:

Maven的依赖书写遵循GAV的原则(Group、Artifact、version),springboot开发只需要写上G和A,V由boot的配置提供,如果发生了坐标的错误,再手动指定version解决冲突
注意,如果我们想要不使用springboot配置的某个类,我们可以用exclusion去掉某个组件
案例:比如我们在启动时不希望使用tomcat服务器而是使用jetty服务器,那么我们就在 spring-boot-starter-web里面去掉tomcat的依赖,并且在外面重新引入jetty的依赖
写好后用maven同步下项目后编译运行就会看到是用jetty服务器启动的

二、springboot自动配置
首先,我们知道springboot有一个启动类,这个类除了是整个应用的入口,而且发挥着配置spring的重要作用
启动类上面有一个SpringBootApplication注解,这个注解是已经封装好的,点进去会看到这个注解包含了很多其他注解,尤其注意SpringBootConfiguration就是之前的Configuration注解表示起到配置类的作用,ComponentScan表示扫描组件


这里,要重点说下上面的EnableAutoConfiguration注解,这个注解作用是开启springboot的自动配置,它同样发挥着多个注解的作用
点进去可以看到,它通过Import这个注解在IOC容器中引入了AutoConfigurationImportSelector这个组件

在AutoConfigurationImportSelector这个类中有一个getAutoConfigurationEntry的方法,它的作用是扫描classpath下的所有jar包的spring.factories文件, 将 spring.factories 文件 key 为 EnableAutoConfiguration 的所有值取出,然后这些值其实是类的全限定名, 也就是自动配置类的全限定名 ,然后 Spring Boot 通过这些全限定名进行类加载(反射),将这些自动配置类添加到 Spring 容器中。


接下来,我们打开外部库中一个叫做spring-boot-autoconfiguration.jar这个jar包,发现里面有一个名为EnableAutoConfiguration的键值对,这个键值对其实就是维护自动配置类的,包括一些web、AOP、redis等依赖的自动配置

我们点开其中的一个自动配置类HttpEncodingAutoConfiguration看看实现:

  • 上面Configuration注解表示这个类是一个配置类,且不支持生成代理对象
  • EnableConfiguration这个注解表示是 启 ConfigurationProperties 功能,也就是将配置文件和 HttpProperties.class 这个类绑定起来,将配置文件的相应的值和 HttpProperties.class 的变量关联起来
  • ConditionalOnWebApplication表示只有在web应用下这个自动配置才会生效
  • ConditionalOnClass表示只有里面的类存在这个自动配置类才会生效
  • ConditionalOnProperty表示只有存在这个配置且其值为Enabled才会生效这个配置类
  • 下面的方法返回值通过@Bean注解加入到容器中
相关推荐
AntBlack20 分钟前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
青云交20 分钟前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
CHEN5_021 小时前
【Java基础面试题】Java基础概念
java·开发语言
bobz9651 小时前
pip install 已经不再安全
后端
寻月隐君1 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github
二十雨辰1 小时前
[TG开发]照片机器人
java·web3
武昌库里写JAVA2 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
落霞的思绪3 小时前
Java设计模式详细解读
java·开发语言·设计模式
Java小白程序员3 小时前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring
Pitayafruit3 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm