问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/qq_54088234/article/details/135127123

Spring Boot作为Spring生态系统的重要组成部分,以其"约定大于配置"的理念和开箱即用的特性,极大地简化了Spring应用的开发过程。本文将深入探讨Spring Boot的核心知识,包括其诞生背景、主要优点、关键概念(如Starters)、常用注解、启动流程以及自动配置机制等,帮助读者全面理解这一强大框架。

Spring Boot的诞生背景

Spring Boot的诞生源于对传统Spring框架的优化需求。虽然Spring的组件代码是轻量级的,但其配置却是重量级的,需要大量XML配置。为了减少配置文件,简化开发过程,Spring Boot应运而生。

通常所说的Spring框架主要指的是Spring Framework。

Spring Boot的主要优点

  1. 开发基于Spring的应用程序变得更容易
  2. 显著减少了Spring Boot项目所需的开发或工程时间,整体生产力得到提升。
  3. 无需编写大量样板代码、XML配置和注释
  4. Spring Boot应用程序可以很容易地与Spring生态系统集成,如Spring JDBC、Spring ORM、Spring Data、Spring Security等。
  5. 遵循"固执己见的默认配置"原则,以减少开发工作(默认配置可以根据需要进行修改)。
  6. 提供嵌入式HTTP服务器(如Tomcat和Jetty),便于开发和测试Web应用程序。
  7. 提供命令行接口(CLI)工具,用于开发和测试Spring Boot应用程序,支持Java或Groovy。
  8. 提供多种插件,可以使用内置工具(如Maven和Gradle)开发和测试Spring Boot应用程序。

Spring Boot Starters

Spring Boot Starters是一组预定义的依赖项集合,用于快速启动常见的应用程序功能。例如,若要快速启动一个Spring Boot Web应用程序,只需在项目中引入spring-boot-starter-web依赖即可。

支持的内嵌Servlet容器

Spring Boot支持以下三个内嵌Servlet容器:

Name
Servlet Version
Tomcat 9.0(默认容器)
4.0
Jetty 9.4
3.1
Undertow 2.0
4.0

常用注解

Spring Boot中常用的注解包括:

  1. @SpringBootApplication:用于标注Spring Boot应用程序主类,相当于@Configuration、@ComponentScan和@EnableAutoConfiguration的组合。
  2. @Controller:用于标注控制器类,处理请求并返回响应。
  3. @RestController@Controller的变体,用于处理RESTful API请求并返回JSON格式的响应。
  4. @RequestMapping:用于将URL请求映射到处理器方法上,支持通过value、method、params和headers属性进行配置。
  5. @Autowired:用于自动装配Spring容器中的Bean对象。
  6. @Component:用于标注一个类为Spring Bean,Spring会自动扫描并将其注册到容器中。
  7. @Bean:用于标注一个方法,表示该方法返回一个Bean对象并将其注册到Spring容器中。
  8. @Service:用于标注服务类,提供业务逻辑服务。
  9. @Repository:用于标注DAO类,提供数据库访问操作。
  10. @Value:用于注入配置文件中的属性值。
  11. @Profile:用于指定Bean所属的环境,支持根据环境创建不同Bean。
  12. @Conditional:根据条件决定是否创建Bean对象。
  13. @Configuration:用于标注配置类,包含Bean的定义和配置信息。
  14. @ComponentScan:用于指定要扫描的包或类范围。
  15. @EnableAutoConfiguration:用于自动配置Spring Boot应用程序,根据依赖项自动配置Spring应用程序。

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

Spring Boot的启动流程

以下是一个典型的Spring Boot应用程序启动类代码:

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

Spring Boot的启动过程大致分为9个步骤:

  1. 创建监听器并准备监听。
  2. 容器环境预配置。
  3. 打印banner(logo)。
  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. 根据条件注解(如@ConditionalOnClass@ConditionalOnMissingClass@ConditionalOnBean等)判断哪些自动配置类需要生效。
  3. 如果某个自动配置类需要生效,Spring Boot会自动将该类的配置信息添加到Spring上下文中。
  4. 如果多个自动配置类之间存在冲突,Spring Boot会根据优先级决定哪个配置生效,可以通过修改配置文件中的属性值来调整优先级。

"约定大于配置"原则

在Spring Boot中,"约定大于配置"的原则意味着开发人员只需配置不符合默认约定的部分,其他部分则采用默认配置。这种设计思想大大减少了配置工作量,提高了开发效率。

启动类扫描范围

需要注意的是,Spring Boot的启动类只能扫描到当前包及其子包下的类。因此,在设计项目结构时需要合理规划包的层次关系。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号