一.Spring Boot 的工作原理可以概括为以下几个核心步骤:
1.引导类:
Spring Boot 应用通常以一个主类作为入口,使用 @SpringBootApplication 注解。这个注解包含了三个重要的注解:@Configuration、@EnableAutoConfiguration 和 @ComponentScan。
2.自动装配:
@EnableAutoConfiguration 注解会启用 Spring Boot 的自动装配功能。Spring Boot 会根据应用的类路径和所声明的 Beans,自动配置 Spring 应用所需的组件。
3.条件化配置:
自动装配过程中,Spring Boot 使用一系列的条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等),根据环境和已有 Bean 的状态来决定是否加载特定的配置。
4.组件扫描:
@ComponentScan 注解会指示 Spring 容器扫描指定的包(通常是主类所在包及其子包),以发现并注册标注为 @Component、@Service、@Repository 和 @Controller 等的 Bean。
5.创建和初始化容器:
Spring Boot 会创建一个 ApplicationContext(通常是 AnnotationConfigApplicationContext 或 SpringBootServletInitializer),并在其中注册所有的 Bean 和配置。
6.运行时配置:
Spring Boot 支持通过 application.properties 或 application.yml 文件进行外部化配置,允许开发者在不同环境中灵活调整应用参数。
7.嵌入式服务器:
Spring Boot 支持嵌入式服务器(如 Tomcat、Jetty 或 Undertow),使得开发者可以直接运行 Spring Boot 应用,而无需单独部署在外部服务器上。
8.启动和运行:
一旦上下文和所有的 Bean 创建完毕,Spring Boot 应用就会启动,并开始监听 HTTP 请求或其他事件。
二.Spring Boot 的自动装配原理主要依赖于 Spring Framework 的核心特性和一些特定的注解。以下是其基本原理:
1.@EnableAutoConfiguration:这是 Spring Boot 的核心注解之一。它会触发自动装配的过程。在这个注解的背后,Spring Boot 会加载 META-INF/spring.factories
文件中的配置类,寻找需要自动装配的类。2.条件化装配:Spring Boot 使用了一系列的条件注解,例如 @ConditionalOnClass、@ConditionalOnMissingBean 等。这些注解可以控制某个 Bean
是否需要被自动装配。例如,只有在类路径中存在某个特定的类时,相关的配置才会生效。3.配置类:自动装配的逻辑通常会在带有 @Configuration 注解的类中实现,这些类中定义了需要被创建的 Bean。
4.优先级与排序:在进行自动装配时,如果有多个相同类型的 Bean,Spring Boot 还会通过一些机制来决定使用哪个 Bean,例如根据 @Primary 注解或者 @Qualifier 注解来指定优先级。
5.Spring ApplicationContext:当应用启动时,Spring Boot 会创建一个 ApplicationContext,并在其中注册自动装配的 Bean。这是通过读取配置类和条件判断的结果来完成的。