第七章 SpringBoot框架

简介: SpringBoot简化Spring开发,核心功能包括starter起步依赖、自动配置和内嵌服务器支持。通过@SpringBootApplication实现自动化配置,优先级:命令行参数 > 系统属性 > properties > yml/yaml。自定义starter需创建两个模块,分别管理依赖与自动配置,并在指定文件中注册配置类。

聊聊你对SpringBoot框架的理解 ?SpringBoot是现在Spring家族最为流行的子项目,因为采用原始的SpringFramework框架开发项目,配置起来非常的繁琐,所以在Spring的4.0版本之后,Spring家族推出了SpringBoot框架,而Springboot就是来解决Spring框架开发繁琐的问题的,是用来简化spring框架开发的。 主要提供了这么三大块功能:starter起步依赖。springboot提供了各种各样的starter,在starter起步依赖中,就封装了常用的依赖配置,大大简化了项目引入依赖坐标的复杂度。自动配置。 这也是springboot中最核心的功能,springboot可以根据特定的条件(当前环境是否引入对应的依赖、配置文件中是否有某个配置项、当前环境是否已经有了某个bean)来创建对象的bean,从而完成bean的自动配置。jar包方式运行。 springboot中内嵌了web服务器,所以我们开发的web项目,也可以直接打成一个jar包,直接基于java -jar 执行运行,非常的方便。当然,这些呢,只是Springboot中提供的核心功能,还有其他的一些小功能,都是非常实用的 。SpringBoot框架常见的starter你都用过哪些 ?spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)spring-boot-starter-aop (aop开发支持)spring-boot-starter-data-redis (redis支持)spring-boot-starter-data-elasticsearch (es支持)spring-boot-starter-amqp(消息队列支持)spring-boot-starter-data-mongodb (mongodb的支持)mybatis-plus-boot-starter(mybatis plus的支持)mybatis-spring-boot-starter(mybatis的支持)那这些个starter,其实分为两类,一类是springboot官方提供的,命名都是:spring-boot-starter-xxxx;另一类是第三方框架提供的,命名都是:xxxx-spring-boot-starter。Spring Boot配置的优先级?SpringBoot项目中,可以在很多地方来配置项目中的配置项,那这里我主要说两个方面:一个是配置文件,一个是外部配置。在springboot项目中,支持三类配置文件,分别是:application.properties、application.yml、application.yaml。 而这三类配置文件的优先级最高的是 application.properties,其次是 application.yml,最后是 application.yaml。而外部配置呢,常用的有两种配置形式,一种是java系统属性,比如:-Dserver.port=9001;另一种是命令行参数,比如:--server.port=10010。而命令行参数的优先级要高于java系统属性。而整体上,外部配置的优先级要高于项目内部的配置文件中的配置,所以整体来说配置文件的优先级由高到低的顺序为:命令行参数 > java系统属性 > application.properties > application.yml > application.yamlSpringBoot自动配置的原理是什么?嗯,好的,它是这样的。其实SpringBoot自动配置的核心,是引导类上加的注解@SpringBootApplication 底层封装的一个注解,叫@EnableAutoConfiguration,这个注解才是实现自动化配置的核心注解。 该注解通过@Import注解导入对应的配置选择器,导入了一个ImportSelector接口的实现类。 而在这个类的内部呢,读取了该项目和该项目引用的Jar包中的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。 在这些配置类中所定义的Bean,会根据条件注解@Condition系列注解所指定的条件来决定是否需要将其导入到Spring容器中。一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。但是这里要说明一点哈,就是刚才提到的系统配置类声明的配置文件 META-INF/spring.factories, 在springboot3.0版本之后,就已经废除了,不会在这个文件中配置自动配置类了,替换成了一份新的配置文件,配置文件名比较长,记不住,后缀名为:XXxxxSpringAutoConfiguration.imports。SpringBoot中如何自定义starter?嗯,这个我知道,之前在项目中,我们封装过的,像阿里云OSS操作的starter。 首先,先说模块哈,自定义starter,我们通常会定义两个maven模块。一个是:xxx-spring-boot-starter ,这个模块主要负责管理依赖,最后项目中引入的就是这个模块。另一个是:xxx-spring-boot-autoconfigure,这个模块负责自动配置功能,所有的自动配置的核心代码,都定义在这个模块中。并在在starter模块中,还要引入autoconfigure这个模块的依赖。然后再来说核心的autoconfigure模块的实现。第一步呢,就是要根据具体的需求,编写自动配置类。 基于@Configuration注解定义配置类,然后使用@Bean注解来声明bean,可以通过@Conditional系列的注解,根据条件决定是否声明这个bean。第二步,就是需要在META-INF/spring.factories配置文件中,根据规则配置自动配置类的全类名。 如果是SpringBoot3.x版本,则需要在新的配置文件,META-INF/spring/xxxx.SpringAutoConfiguration.imports文件中配置自动配置类的全类名。基本上,就这么两块儿。定义好了之后,在各个项目中,就可以引入对应的starter直接使用了。


相关文章
|
15小时前
|
Java 网络安全 开发工具
[MES]不合格订单接入提醒功能(☆☆☆) 1.代码运行
本文介绍入职后如何快速搭建开发环境并运行项目,包括克隆代码、配置JDK/Maven/Git等工具的求助策略,并模拟真实需求:实现不合格工单超30分钟自动通知(短信/钉钉),涉及Git、Maven、SpringBoot及定时任务技术,提升新人实战能力。
|
9小时前
|
关系型数据库 MySQL Java
开发环境搭建
工欲善其事,必先利其器。学习前请确保电脑内存16G以上(建议32G),安装VMware及CentOS7虚拟机,配置网络与IP,远程连接使用FinalShell。苹果用户需安装Docker并部署MySQL8。下载课程资料、Maven仓库及虚拟机镜像,导入后设置IDEA开发环境,配置JDK11、自动导包与编码。通过Git Fork项目至个人仓库并克隆到本地,完成环境搭建。
|
12小时前
|
自然语言处理 搜索推荐 Java
ES分布式搜索引擎入门
本课程介绍Elasticsearch的核心概念与应用,涵盖倒排索引原理、IK分词器使用及Java Client操作,实现高效全文检索、增删改查、批量导入、查询优化等功能,提升搜索性能与体验。
ES分布式搜索引擎入门
|
11小时前
|
SQL 存储 JSON
慢SQL说起:淘天交易订单表如何做索引优化
本文以淘天电商订单表的慢SQL优化实践为切入点,系统剖析了非典型慢SQL的成因与排查方法,深入讲解了索引分类、B+Tree与B-Tree结构差异、执行计划解读及Query Profiler等诊断工具的使用,并结合大表索引变更案例,总结了索引优化理论与线上SOP,提炼出常见慢SQL问题的解决策略。
慢SQL说起:淘天交易订单表如何做索引优化
|
15小时前
|
运维 Devops 开发工具
生产环境缺陷管理
git-poison是一款基于go-git的分布式bug管理工具,解决多分支开发中bug漏修、漏发等协同难题。通过“投毒-解毒”机制,实现bug全流程自动化追踪与发布卡点,降低沟通成本,提升发布安全性,已在大型团队落地应用。
|
8小时前
|
负载均衡 算法 Java
Day01
本文介绍微服务架构的适用场景及核心组件,对比单体与微服务优劣,讲解Nacos注册中心心跳机制及其与Eureka异同,涵盖常见负载均衡算法,并梳理Java基础理论如JMM、HashMap、线程池等,助力技术面试准备。
|
8小时前
|
设计模式 Linux 开发工具
Day02
熟悉Docker部署,掌握docker run、dockerfile及compose集群部署;熟练使用镜像与容器相关指令。了解常用Linux命令如ls、cd、grep、ps、top等,掌握日志查看技巧,能通过cat、grep、vim等命令快速定位问题。
|
15小时前
|
SQL Dubbo Java
线程池:故障梳理总结
本文从故障与技术双重视角,总结线程池满导致服务不可用的常见原因及应对策略。涵盖数据库慢查询、热更新、DDL 锁表、深分页等典型故障案例,并深入分析 Dubbo、HTTP、Druid 等连接池超时设置、资源隔离与限流保护机制,帮助开发者快速定位问题并实现 fast-fail 防护,提升系统稳定性。
|
8小时前
|
存储 缓存 NoSQL
项目《神领物流》
本项目为基于微服务架构的智能物流系统,涵盖用户端、快递员端、司机端及管理端。采用GitFlow协作,Jenkins实现CI/CD,通过Neo4j进行路线规划,结合Redis、MongoDB优化性能与存储,集成微信登录与权限管家,实现高效、智能的物流调度与管理。
|
9小时前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个为养老院打造的单体后台管理系统,涵盖员工管理端与家属小程序端。系统功能完善,包括预约、入住、退住、计费及健康监测等模块。项目采用SpringBoot+Vue3技术栈,结合Redis缓存、阿里云IoT平台与OSS存储,实现高效稳定的数据交互与实时监控。支持RBAC权限控制、智能报警、微信登录、定时任务等功能,提升养老管理智能化与服务体验。(239字)