01.SpringBoot自动配置原理.pdf
点击查看【processon】
Spring的bean加载顺序
bean是否单列、懒加载
如何实现这个实例化bean的过程?
反射,通过class.newinstance()方法将bean加载到容器中
BeanDefinition
- 描述一个bean的全部信息,比如他的class类型、Bean的作用域、是否懒加载…
- spring中每一个被扫描到的bean都会生成一个BeanDefinition。
- BeanDefinition的主要作用是为了在只解析一次类的情况下,最大程度的拿到这类的信息。防止重复解析导致效率变低。
从Srpring的IOC到SpringBoot的自动配置原理
springboot是一个脚手架
EnableAutoConfiguration:开启自动配置功能,通过@Import导入DeferredImportSelector,去读取自动配置类(在所有jar包下的META-INF/spring.factories)返回List,spring就会把这些Bean放到Map里面去,再通过Beanfactory创建成最终的Bean到IOC中。
@ConditionalOnXXX 中的所有条件都满足,该类才会生效。
到这里可能面试官会问你:“spring.factories中这么多配置,每次启动都要全部加载么?
这边会有筛选,会加载在xml中加的那些相关配置类DeferredImportSelector对Bean加载顺序的影响
DeferredImportSelector和ImportSelector一个区别
比如SqlsessionFactory加载完毕以后,我们需要自定义一个SqlsessionFactory实现我们需要的功能,达到延展性,而ImportSelector是实现不了的,不会覆盖新的SqlsessionFactory;DeferredImportSelector:会在spring解析了@import、@Component等所有注解以后再去解析DeferredImportSelector,如果你已经配置了Bean如下图,就会覆盖默认配置的SqlsessionFactory类。
特性:延时加载、分组
在解析配置类时只是将其加入到一个容器中,等到所有的配置类都解析完成后才会处理DeferredImportSelector。总结
Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖
