深入理解 Spring Boot:核心知识与约定大于配置原则

深入理解 Spring Boot:核心知识与约定大于配置原则

简单说一下为什么要有 Spring Boot?

因为 Spring 的缺点。

虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的(需要大量 XML 配置)

为了减少配置文件,简化开发 Spring,所以 Spring Boot 诞生了。

具体演变如下图所示:

image

一般说 Spring 框架指的都是 Spring Framework

说下 Spring Boot 的主要优点

  1. 开发基于 Spring 的应用程序很容易
  2. Spring Boot 项目所需的开发或工程时间明显减少,通常会提高整体生产力。
  3. Spring Boot 不需要编写大量样板代码、XML 配置和注释
  4. Spring 引导应用程序可以很容易地与 Spring 生态系统集成,如 Spring JDBC、Spring ORM、Spring Data、Spring Security 等。
  5. Spring Boot 遵循“固执己见的默认配置”,以减少开发工作 (默认配置可以修改)。
  6. Spring Boot 应用程序提供嵌入式 HTTP 服务器,如 Tomcat 和Jetty,可以轻松地开发和测试 web 应用程序。 (这点很赞!普通运行 Java 程序的方式就能运行基于Spring Boot web 项目,省事很多)
  7. Spring Boot 提供命令行接口(CLI)工具,用于开发和测试 Spring Boot 应用程序,如 Java 或 Groovy。
  8. Spring Boot 提供了多种插件,可以使用内置工具(如 Maven 和 Gradle)开发和测试 Spring Boot 应用程序。

什么是 Spring Boot Starters?

Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。

简单来说,就是一系列依赖关系的集合。

例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入 spring-boot-starter-web 这个依赖即可。

Spring Boot 支持哪些内嵌 Servlet 容器?

有三个:

NameServlet Version
Tomcat 9.0(默认容器)4.0
Jetty 9.43.1
Undertow 2.04.0

Spring boot常用注解有哪些?

Spring Boot 中常用的注解有:

  1. @SpringBootApplication:该注解用于标注 Spring Boot 应用程序主类,表示该类是一个 Spring Boot 应用程序的入口点,可以看作是 @Configuration@ComponentScan@EnableAutoConfiguration 注解的集合。

  2. @Controller:该注解用于标注控制器类,表示该类是 Spring MVC 控制器,处理请求并返回响应。

  3. @RestController:该注解是 @Controller 注解的变体,表示该类是 RESTful API 的控制器类,处理请求并返回 JSON 格式的响应。

  4. @RequestMapping:该注解用于将 URL 请求映射到处理器方法上,可以通过 value 属性指定 URL 地址,通过 method 属性指定请求方法,还可以通过 params 属性和 headers 属性指定请求参数和请求头。

  5. @Autowired:该注解用于自动装配 Spring 容器中的 Bean 对象,可以用于字段、构造方法和 Set 方法上。

  6. @Component:该注解用于标注一个类为 Spring Bean,Spring 会自动扫描这个注解,并将该类注册到 Spring 容器中。

  7. @Bean:该注解用于标注一个方法,表示该方法返回一个 Bean 对象,该对象将被注册到 Spring 容器中。

  8. @Service:该注解用于标注一个服务类,表示该类提供业务逻辑服务,通常与 @Component 注解一起使用。

  9. @Repository:该注解用于标注 DAO 类,表示该类提供对数据库的访问操作,通常与 @Component 注解一起使用。

  10. @Value:该注解用于注入配置文件中的属性值,可以用于字段、构造方法和 Set 方法上。

  11. @Profile:该注解用于指定 Bean 对象所属的环境,可以根据不同的环境来创建不同的 Bean 对象。

  12. @Conditional:该注解可以根据条件来决定是否创建 Bean 对象,可以与 @Profile 注解一起使用,用于根据不同的环境来创建不同的 Bean 对象。

  13. @Configuration:该注解用于标注配置类,表示该类是 Spring 配置类,可以包含 Bean 的定义和配置信息。

  14. @ComponentScan:该注解用于指定要扫描的包或类,以及要扫描的 Bean 的范围。

  15. @EnableAutoConfiguration:该注解用于自动配置 Spring Boot 应用程序,根据项目中添加的依赖项自动配置 Spring 应用程序,使得开发者不需要手动配置 Spring 应用程序。

当在 Spring Boot 应用程序中使用 @ComponentScan 注解时,Spring Boot 将自动扫描注解类所在的包以及其子包下的所有类,将带有 @Component@Service@Controller@Repository 等注解的类注册为 Bean,这样这些 Bean 就可以被注入到其他类中使用了。

Spring 是如何启动的?

以下是一个启动类代码:

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

启动大概有 9 个步骤:

  1. 创建监听,并准备监听。

  2. 容器环境预配置。

  3. 打印 banner

  4. 创建 Spring 容器(IoC)。

  5. 容器刷新前置处理。

  6. 容器刷新。

  7. 容器刷新后置处理。

  8. 发出容器刷新结束通知。

  9. 调用 runner 执行启动后的相关程序。

具体解析:

  • 创建监听并准备监听,实际上做的就是从 META-INF/spring.factories 中获取关于监听器的类然后返回一个监听器列表
  • 打印 banner,就是在控制台输出一个 logo
  • 容器操作也就是实现 IoC 的步骤了

Spring Boot 的自动配置是如何实现的?

总的来说,Spring Boot 的自动配置是通过条件注解机制优先级机制来实现的.

主要包括以下几个步骤:

  1. Spring Boot 在启动时会扫描 classpath 下的 META-INF/spring.factories 文件,该文件中包含了所有自动配置类的全限定名。

  2. 根据条件注解的条件,Spring Boot 会自动判断哪些自动配置类需要生效。

    条件注解包括 @ConditionalOnClass@ConditionalOnMissingClass@ConditionalOnBean@ConditionalOnMissingBean@ConditionalOnProperty@ConditionalOnResource@ConditionalOnWebApplication 等。

  3. 如果某个自动配置类需要生效,Spring Boot 会自动将该类的配置信息添加到 Spring 上下文中,这样就可以在应用程序中使用了。

  4. 如果多个自动配置类之间存在冲突,Spring Boot 会根据优先级来决定哪个自动配置类生效。可以通过修改配置文件中的属性值来调整自动配置类的优先级。

SpringBoot 归约大于配置

在 SpringBoot 中,约定大于配置的原则是指:开发人员仅需规定应用中不符合约定的部分,而在没有规定配置的地方,采用默认配置,以力求最简配置为核心思想。总的来说,上面两条都遵循了推荐默认配置的思想。当存在特殊需求的时候,自定义配置即可。这样可以大大的减少配置工作,这就是所谓的 “约定” 。

启动类

启动类只能扫描到【当前包及其子包】下的类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299804.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码实施复杂应用的实践方法

内容来自演讲:韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理 摘要 本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险,包括项目规划不周、人员变动、企业基础管理不足等,并对比了低…

市场复盘总结 20231225

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整 昨日回顾: SELECT CODE,成交额排名,净流入排名,代码,名称,DDE大单金额,涨幅,主力净额,DDE大单净量,CONVERT(DATETIME, 最后封…

CSRF(Pikachu)

CSRF(get) 首先我们先登录账号 admin 密码是;123456 点击修改个人信息 用F12或者BP 抓包看看我们的url 那么构成的CSRF攻击payload为http://pikachu.shifa23.com/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboy&phonenum”手机…

智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.卷积优化算法4.实验参数设定5.算法结果6.…

让某个页面一直处于最前面,可以屏蔽切屏检测

前言 学习通智慧树网课分屏,让某个页面一直处于最前面,可以屏蔽切屏检测。 页面一直处于最前面 前言1 安装包2 使用 1 安装包 https://download.csdn.net/download/qq_44850489/76684366 2 使用 一直下一步就可以 选择要放到前面的窗口&#xff0c…

摸索若依框架是如何实现权限过滤的

摸索若依框架是如何实现权限过滤的 这篇文章,我也是作为一个优秀开源框架的学习者,在这里摸索这套框架是如何实现权限过滤的,这个封装对于入行Java半年之余的我来说,理解起来有些困难,所以,文章只是作为一个…

反转链表算法及优化(leetcode第206题)

题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例…

【Linux系统编程】【Google面试题改编】线程之间的同步与协调 Linux文件操作

编写程序,有四个线程1、2、3、4 线程1的功能就是输1,线程2的功能就是输出2,以此类推……现在有四个文件ABCD初始都为空 现要让四个文件呈如下格式: A: 1 22 333 4444 1 22 333 4444… B: 22 333 4444 1 22 333 4444 1… C: 333 4444 1 22 333 4444 1 2…

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】 目录 分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCSO-…

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…

Ascon加解密算法分析

参数定义 加密架构图 整个过程是在处理320bits的数据,所以在最开始需要对原始的数据进行一个初始化,获得320bits的数据块, 图里看到的pa和pb都是在做置换(对320bits的数据进行一个置换) 置换(Permutation&…

智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.…