Springboot工作机制

@SpringBootApplication注解等同于@Configuration、@ComponentScan和@EnableAutoConfiguration的组合,它简化了Spring Boot应用的配置过程。该注解使应用能够自动配置组件,并通过SpringFactoriesLoader加载自定义配置。

@SpringBootApplication注解揭秘

这个注解并不一定要修饰在主函数的类上,修饰其他类也是可以的。@SpringBootApplication注解相当于@Configuration @ComponentScan @EnableAutoConfiguration;只是这三个使用频率高所以就使用组合注解@SpringBootApplication表达了;@Configuration修饰一个类,表示的是这个类是IOC容器的配置类,EnableAutoConfiguration是借助import支持收集和注册特定场景相关的bean的定义,也可以看成是收集@Configuration修饰的类,自动配置的幕后英雄SpringFactoriesLoader,主要功能是加载META-INF/spring.factories下的配置文件,配置的格式是key=value 的标准的properties文件格式。根据EnableAutoConfiguration的全类名寻找对应的value,然后通过反射将这些类实例化为对应的标注@ConfigurationjavaConfig形式的Ioc容器配置类,然后加载到ioc容器中。这种机制就是实现了热插拔的自动配置。如果要先让自己的写的项目也有自动的配置的话在自己classpatch下定义META-INF/spring.factories然后设置key=value
key是EnableAutoConfiguration的包全名,value是自己配置类的包全名

深入探索SpringBoot的执行流程

如果忽略事件通知的扩展点,主要流程如下
这里写图片描述
ApplicationListener是spring框架对java中实现的监听者模式的一种框架实现,但是ApplicationContextRunInitializer是不一样的,我们一般不会需要自己定义ApplicationContextRunInitializer。我们可以用过SpingApplication.addListener添加自定义的ApplicationListener.或者在META-INF/spring.factories文件下设置key 为ApplicationListener.全名的键值

调整自动配置的顺序

可以再@Configuration 修饰的Ioc配置类上添加AutoConfigureAfter(另一个配置类.class),AutoConfigureBefore(另一个配置类.class)。除此之外springboot还为我们提供了其他一些诸多的条件化装配bean的配置类

### Spring Boot 的工作机制和运行原理 Spring Boot 的核心设计理念是通过自动配置(Auto-Configuration)和约定优于配置(Convention over Configuration)来简化开发流程,使开发者能够快速构建独立、生产级的 Spring 应用程序。以下是 Spring Boot 的工作机制和运行原理的详细说明: #### 1. 自动配置机制 Spring Boot 的自动配置功能基于 `@EnableAutoConfiguration` 注解实现。该注解会扫描类路径中的依赖项,并根据这些依赖项加载相应的配置类[^1]。例如,如果项目中引入了 MySQL 数据库驱动程序,则 Spring Boot 会自动配置 `DataSource` 和 `JdbcTemplate` 等组件。 #### 2. 启动流程 当启动一个 Spring Boot 应用时,框架会执行以下关键步骤: - **加载引导上下文**:通过 `SpringApplication.run()` 方法创建并初始化引导上下文(Bootstrap Context),它负责加载全局配置文件(如 `application.properties` 或 `application.yml`)。 - **注册监听器与初始处理器**:在引导上下文中注册事件监听器和初始处理器,用于处理应用程序生命周期中的各种事件。 - **创建主应用上下文**:基于引导上下文的信息创建主应用上下文(Application Context),它是整个应用的核心容器。 - **执行 Runners**:调用所有标记为 `CommandLineRunner` 或 `ApplicationRunner` 的 Bean,以执行特定的启动逻辑[^1]。 #### 3. 配置加载过程 Spring Boot 支持多种方式加载配置信息,包括但不限于: - 命令行参数 - 系统环境变量 - JNDI 属性 - 配置文件(`application.properties` 或 `application.yml`) 配置加载遵循一定的优先级规则,确保更具体的配置覆盖默认值或较低优先级的设置[^1]。 #### 4. 组件扫描与依赖注入 Spring Boot 默认启用了组件扫描功能,可以通过 `@ComponentScan` 注解指定需要扫描的包路径。在此过程中,Spring 容器会识别并注册带有 `@Component`、`@Service`、`@Repository` 和 `@Controller` 等注解的类作为 Bean[^2]。同时,利用依赖注入机制将这些 Bean 注入到其他组件中,从而实现松耦合的设计模式。 #### 5. 内嵌服务器支持 Spring Boot 提供了对内嵌 Tomcat、Jetty 和 Undertow 等 Web 服务器的支持。通过简单的 Starter 依赖引入即可启用相应服务器,并且无需额外配置即可运行 Web 应用程序。 #### 6. 示例代码 以下是一个典型的 Spring Boot 应用程序启动类示例: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 上述代码中,`@SpringBootApplication` 是一个组合注解,内部包含了 `@SpringBootConfiguration`、`@EnableAutoConfiguration` 和 `@ComponentScan`,分别用于标识这是一个 Spring Boot 配置类、启用自动配置以及定义组件扫描范围。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值