SpringBoot源码分析

SpringBoot是一种基于Spring的开发框架,通过自动配置和约定优于配置原则,简化了应用程序初始化和配置。它提供快速构建独立应用的能力,集成了常用库,支持嵌入式容器、健康检查和自定义配置,提升了开发效率。
摘要由CSDN通过智能技术生成

1.什么是SpringBoot

Spring Boot是一种基于Spring框架的开发框架,它简化了Spring应用程序的初始化和配置过程。Spring Boot通过自动配置和约定优于配置的原则,减少了开发者在项目搭建和配置上的工作量,提高了开发效率。

Spring Boot提供了一种快速构建独立、可执行的Spring应用程序的方式,它集成了大量常用的第三方库和工具,如Tomcat、Hibernate、Spring Data等,使得开发者可以更加方便地开发Web应用、RESTful服务、批处理应用等。

Spring Boot还提供了一个内嵌的Servlet容器,可以直接将应用程序打包成一个可执行的JAR文件,并通过java -jar命令来启动应用程序,无需额外安装和配置Servlet容器。

总之,Spring Boot是一种简化Spring应用程序开发的框架,它提供了快速、方便的开发方式,让开发者能够更专注于业务逻辑的实现。

2、SpringBoot的原理和特性

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。

Spring Boot中的一些特点:

  1. 创建独立的spring应用。
  2. 嵌入Tomcat, Jetty Undertow 而且不需要部署他们。
  3. 提供的“starters” poms来简化Maven配置
  4. 尽可能自动配置spring应用。
  5. 提供生产指标,健壮检查和外部化配置
  6. 绝对没有代码生成和XML配置要求。

组成和结构如下图:

从图中可以看出SpringBoot是包含了Spring的核心(IOC)和(AOP);以及封装了一些扩展,如Stater:

3.如何使用Spring Boot 创建一个简单的项目进行CRUD操作


剩下的就和我们使用SSM创建项目无疑,但是最重要的就是我们需要的yml配置

        

我们需要启动的话只需要打开我们启动类就可以了,我们创建的所有的文件的时候都必须要存放在启动类下面,不然找不到的话就需要我们手动配置  

最后进行一个整体的结构分析

4.Spring Boot的原理分析


自动配置(Auto-configuration):Spring Boot通过条件化配置(Conditional Configuration)和自动扫描机制(Classpath Scanning)来自动配置应用程序所需的各种组件和功能。它根据应用程序的类路径和依赖关系,自动检测并配置相应的Beans、数据库连接、消息队列等。

起步依赖(Starter Dependencies):Spring Boot提供了一组预定义的起步依赖,这些起步依赖包含了常用的库和框架,例如Web开发、数据访问、安全认证等。通过引入适当的起步依赖,开发者无需手动配置和管理这些库的版本和依赖关系,减少了应用程序的配置复杂度。

嵌入式容器(Embedded Container):Spring Boot内置了多个嵌入式容器,如Tomcat、Jetty等,使得应用程序可以独立运行,无需外部容器的支持。开发者只需要将应用程序打包成可执行的JAR文件,即可通过命令行或脚本直接启动。

健康检查(Health Check):Spring Boot提供了健康检查的功能,可以通过HTTP端点暴露应用程序的健康状态。开发者可以借助这些健康检查端点,实时监控应用程序的运行状况,并进行故障排查和告警处理。

自定义配置(Custom Configuration):除了自动配置外,Spring Boot还提供了强大的配置机制,支持多种配置方式,如属性文件、环境变量、命令行参数等。开发者可以根据需要灵活地定制和扩展应用程序的配置。

5.Spring Boot的执行步骤


应用程序入口:Spring Boot应用程序的入口点是一个带有main方法的Java类。在该类中,通过调用SpringApplication.run()方法来启动应用程序。

环境准备:Spring Boot会根据配置文件(如application.properties或application.yml)和命令行参数来加载应用程序的配置,并创建一个ApplicationContext容器。

自动配置:Spring Boot根据约定和自动配置机制,自动初始化和配置各种组件和功能,如数据库连接、Web服务器、安全认证等。这些自动配置是基于类路径上的依赖关系和条件判断进行的。

Bean加载:Spring Boot会扫描应用程序中的Bean定义(注解或XML配置),并将它们注册到ApplicationContext容器中。开发者也可以通过自定义配置类来手动注册额外的Bean。

启动嵌入式容器:如果应用程序使用了Web相关的功能,Spring Boot会根据配置选择适当的嵌入式Web容器(如Tomcat或Jetty),并启动它。嵌入式容器负责处理HTTP请求和响应,使得应用程序可以独立运行。

请求处理:一旦嵌入式容器启动,它会监听指定的端口,并接收和处理传入的HTTP请求。Spring Boot会根据请求的URL路径和HTTP方法,将请求路由到相应的控制器(Controller)处理方法上。

控制器处理:控制器处理方法接收到请求后,根据业务逻辑进行处理,并生成响应数据。可以通过注解来定义请求映射、参数绑定、数据验证等。

响应返回:控制器处理方法执行完成后,会返回一个包含响应数据的对象或视图。Spring Boot会将响应数据转换为合适的格式(如JSON、HTML等),并返回给客户端。

应用程序关闭:当应用程序收到关闭信号(如CTRL+C)或应用程序停止命令时,Spring Boot会优雅地关闭嵌入式容器和释放资源。

6.Spring Boot的源码分析


相信很多人尝试读过Spring Boot的源码,但是始终没有找到合适的方法。那是因为你对Spring Boot的各个组件、机制不是很了解,研究起来就像大海捞针。

这就是具体的源码分析运行的具体步骤:

       
其实我们都知道我们运行springboot项都是通过带有@SpringBootApplication注解开始的我们就以这个注解开始分析

我们点击进入就会发现里面就是通过这些注解来的

@Target({ElementType.TYPE}):指定了该注解可以应用在类(Type)上。
@Retention(RetentionPolicy.RUNTIME):指定了该注解的生命周期为运行时(Runtime),即在运行时可以通过反射获取到该注解的信息。
@Documented:指定该注解需要包含在Java文档中。
@Inherited:指定子类会继承该注解。
@SpringBootConfiguration:该注解表示当前类是Spring Boot的配置类,用于替代传统的XML配置文件。它会被Spring容器加载,并进行相关的自动配置。
@EnableAutoConfiguration:该注解用于开启自动配置功能。它会根据项目的依赖关系和类路径上的类来自动配置Spring应用程序所需的各种组件和功能,如数据库连接、消息队列等。
@ComponentScan:该注解用于指定要扫描的包或类,以及扫描时的过滤规则。在这段代码中,excludeFilters参数配置了两个过滤器,分别是TypeExcludeFilter和AutoConfigurationExcludeFilter,用于排除指定类型的类。
@WebApplicationType这个过程非常重要,直接决定了项目的类型,应用类型分为三种,都在WebApplicationType这个枚举类中

SERVLET:表示使用Servlet容器(如Tomcat、Jetty)作为Web服务器部署应用程序。这是最常见的应用程序类型,适用于基于Web的应用程序开发。

REACTIVE:表示使用响应式编程模型,如Spring WebFlux,构建非阻塞的响应式应用程序。这种应用程序类型通常用于处理高并发和大量请求的场景,并能提供更好的性能和扩展性。

NONE:表示不使用任何Web服务器,即应用程序是一个非Web应用程序。这种类型的应用程序通常用于后台任务、调度程序等场景,不涉及Web请求和响应。

ApplicationContextInitializer可以用于在应用程序启动时对ApplicationContext进行初始化和配置。它提供了一个回调方法initialize(),在ApplicationContext创建之后、在Bean加载之前被调用。

配置灵活性:通过实现ApplicationContextInitializer接口,开发者可以在应用程序启动时根据需要动态地加载和配置Bean、设置环境变量、注册监听器等。

扩展性:通过自定义ApplicationContextInitializer,可以将一些通用的初始化逻辑提取出来,使得可以在多个项目中共享和复用。这样可以减少代码的重复性,提高开发效率。

解耦合:ApplicationContextInitializer可以与Spring的Profile功能结合使用,根据不同的Profile激活不同的初始化逻辑。这样可以使得应用程序的配置更加灵活,并且能够在不同环境中无缝切换。

在Spring Boot中,你可以通过添加监听器(Listener)来监听应用程序的生命周期事件、Servlet上下文事件以及其他自定义事件。Spring Boot提供了多种方式来注册和使用监听器。

通过@EventListener注解:可以将一个监听器方法标记为@EventListener注解,并注册到Spring容器中。
使用ApplicationListener注册Bean:可以将监听器作为一个Bean注册到Spring容器中,并使用addApplicationListener()方法将其添加到SpringApplication中。例如:

7.区别与总结

1.简单理解为:Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展。

2、关系大概就是这样

spring mvc < spring < springboot

复制

3、Spring Boot 对比Spring的一些优点包括

  • 提供嵌入式容器支持
  • 使用命令java -jar独立运行jar
  • 在外部容器中部署时,可以选择排除依赖关系以避免潜在的jar冲突
  • 部署时灵活指定配置文件的选项
  • 用于集成测试的随机端口生成

3、结论

SpringBoot只是Spring本身的扩展,使开发,测试和部署更加方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值