SpringBoot框架

简介: SpringBoot简化Spring开发,核心功能包括starter起步依赖、自动配置及内嵌服务器支持。通过条件注解实现Bean的自动化配置,支持多种外部配置方式且优先级高于内部文件。自定义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.yaml

SpringBoot自动配置的原理是什么?

嗯,好的,它是这样的。

其实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直接使用了。

相关文章
|
4月前
|
Java 应用服务中间件 Maven
Spring Boot 开发环境搭建和项目启动
本文介绍了Spring Boot开发环境的完整搭建流程,涵盖JDK、Maven配置,IDEA与Eclipse中JDK的设置,项目创建、编码统一为UTF-8,以及通过Spring Initializr快速构建工程。详细解析了项目结构、核心注解@SpringBootApplication,编写首个Controller并测试访问,支持端口修改。助力开发者快速入门Spring Boot,实现“开箱即用”的高效开发体验。
|
9天前
|
人工智能 机器人 API
一个人活成一支队伍:OpenClaw多智能体配置+飞书对接+大模型接入优化完整手册
OpenClaw的核心价值在于打破单一AI的能力局限,通过多Agent架构构建分工明确的数字员工团队,让每个智能体专注特定任务,协同完成复杂流程。本文基于2026年最新稳定版,遵循“环境准备→角色规划→核心配置→系统分配→通讯对接→启动调试”6大步骤,详细拆解数字员工团队搭建全流程,同时提供阿里云及本地多系统部署方案、阿里云百炼免费大模型配置,所有命令可直接复制执行,助力用户从零打造高效协同的AI团队。
739 4
|
Java Spring
smiley-http-proxy-servlet 反向代理
背景  反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
4100 0
|
3月前
|
Java 应用服务中间件 微服务
SpringBoot
Spring Boot是Spring框架的扩展,旨在简化Spring应用的初始搭建和开发过程。它通过自动配置、内嵌服务器、起步依赖等特性,减少繁琐的配置,实现快速开发与部署,提升开发者效率,是现代Java开发尤其是微服务架构的重要工具。
 SpringBoot
|
3月前
|
人工智能 自然语言处理 Cloud Native
阿里云开发者必读:2026年 Copilot 和 Cursor 的平替推荐排行榜 (Java与云原生专版)
随着 Qwen-2.5-Coder 等国产开源模型的爆发,国内 AI 编程工具已在性能上对标甚至反超国际竞品。对于深耕国内业务、尤其是使用 Java/Go 技术栈和阿里云设施的企业而言,寻找 Copilot 和 Cursor 的平替推荐 已不再是“降级替代”,而是“体验升级”。
阿里云开发者必读:2026年 Copilot 和 Cursor 的平替推荐排行榜 (Java与云原生专版)
|
8月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
998 8
|
JSON 前端开发 Java
如何封装接口返回结构?
本文详细探讨了API接口返回结构统一化的必要性及其带来的优势,如降低开发的心智负担、减少前端开发难度和提高代码可维护性等。同时也分析了其潜在的缺点,例如灵活性降低和开发成本增加等问题。文章进一步讨论了在Spring Boot中实现统一接口返回结构的具体方法和技术细节,包括如何处理HTTP状态码、返回单个字符串的情况以及如何封装无返回值的接口等。此外,还介绍了如何利用Spring Boot的`ResponseBodyAdvice`和`@RestControllerAdvice`等特性来自动包装控制器方法的返回值及异常处理,以达到更加一致和标准化的接口响应结构。
394 3
如何封装接口返回结构?
|
IDE Java 编译器
lombok编译遇到“找不到符号的问题”
【9月更文挑战第18天】当使用 Lombok 遇到 “找不到符号” 的问题时,可能是由于 Lombok 未正确安装、编译器不支持、IDE 配置不当或项目构建工具配置错误。解决方法包括确认 Lombok 安装、编译器支持,配置 IDE 和检查构建工具配置。通过这些步骤通常可解决问题,若问题仍存在,建议检查项目配置和依赖,或查看日志获取更多信息。
6443 2
|
机器学习/深度学习 人工智能 自然语言处理
AI基础知识
【9月更文挑战第3天】
1434 7
|
监控 Java 持续交付
如何搭建漂亮的 SpringBoot 脚手架?
【10月更文挑战第1天】在快速迭代的软件开发环境中,一个高效、美观且易于维护的 SpringBoot 脚手架是项目成功的关键。本文将详细介绍如何搭建一个既实用又漂亮的 SpringBoot 脚手架,帮助你在工作和学习中提升开发效率。
2475 0

热门文章

最新文章