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
中的一些特点:
- 创建独立的
spring
应用。 - 嵌入
Tomcat
,Jetty
Undertow
而且不需要部署他们。 - 提供的“starters” poms来简化
Maven
配置 - 尽可能自动配置
spring
应用。 - 提供生产指标,健壮检查和外部化配置
- 绝对没有代码生成和
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
本身的扩展,使开发,测试和部署更加方便。