Appearance
参考: http://svip.iocoder.cn/Spring-Boot/Interview/
看完这篇文章,感觉收效甚微,这里记录一下这套视频的相关笔记,同时如果后续进行回顾的话希望对于 SpringBoot 有更好的一个理解和具体使用。(后续打算将相关的框架集成相关实际项目使用的内容搞一下,根据这个项目: https://github.com/YunaiV/SpringBoot-Labs )
视频地址: https://www.bilibili.com/video/BV1Fh4y1D7Aq
学习时间:2024-05-01 10:49:20
SpringBoot 自动配置原理
- 1、通过 @SpringBootConfiguration 引入了 @EnableAutoConfiguration(负责启动自动配置功能)
- 2、@EnableAutoConfiguration 引入了 @Import
- 3、Spring 容器启动时:加载loc容器时会解析@Import注解
- 4、@Import导入了一个deferredlmportSelector,它会使SpringBoot的自动配置类的顺序在最后,这样方便我们扩展和覆盖
- 5、然后读取所有的 /META-INF/spring.factories 文件
- 会去所有的 jar 包中和类路径中去读取这个文件(伪 SPI )
- 6、过滤出所有AutoConfigurtionClass类型的类
- 7、最后通过 @Condition 排除无效的自动配置类
梅特 in For
看一下这段话:

关于条件评估这步:
@ConditionalOnClass: 当类路径上存在指定的类时,相关的配置才会被应用。@ConditionalOnBean: 当上下文中存在指定的 Bean 时,相关的配置才会被应用。@ConditionalOnProperty: 当存在指定的配置属性且满足指定的值时,相关的配置才会被应用。
为什么 SpringBoot 的 jar 可以直接运行?
- 1、SpringBoot提供了一个插件 spring-boot-maven-plugin, 用于把程序打包成一个可执行的jar包。
- 2、Spring Boot应用打包之后,生成一个Fat jar(jar包中包含jar),包含了应用依赖的 jar包和Spring Boot loader相关的类。
- 3、java -jar 会去找 jar中的 manifest文件,在那里面找到真正的启动类;
- 4、Fat jar的启动Main函数是 JarLauncher, 它负责创建一个LaunchedURLClassLoader:来加载boot-lib下面的jar,并以一个新线程启动应用的启动类的 Main函数(找到 manifest 中的 Start-Class)。

暂时没找到对应的类,而且 MainClass 对应相关配置也没看到,可能理解和实际有点问题。
SpringBoot 的启动原理
SpringBoot 的核心注解
- 1、@SpringBootApplication注解:这个注解标识了一个SpringBoot.工程,它实际上是另外三个注解的组合,这三个注解是
- 2、@SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类
- 3、@EnableAutoConfiguration:向Spring容器中导入了一个Selector,用来加载 ClassPath 下 SpringFactoriest 中所定义的自动配置类,将这些自动加载为配置Bean。
- 4、@Conditional也很关键,如果没有它我们无法在自定义应用中进行定制开发
- @ConditionalOnBean
- @ConditionalOnClass
- @ConditionalOnExpression