SpringBoot——原理(自动配置+原理分析-源码跟踪)

源码跟踪

从Springboot的启动类进入,进行分析.

 源码跟踪技巧

在以后接触各种框架的时候,如果需要查看源码,需要找到关键点和核心流程,先在宏观对整个原理和流程有一个认识,之后再去了解其中的细节。

按住Ctrl+左键进入源码

在整个注解上面还有很多个注解,上面四个是用来修饰注解的元注解,不需要看。

下面开始第一个注解

@SpringBootConfigguration注解   

在这个注解中也有三个源注解,不用看。

除此之外的它的主要作用就是装配了@Configuration这个注解,作用就是声明配置类。

还有一个@Indexed注解作用是加速应用启动。 

有了这个注解后,启动类也会变成一个配置类,所以在启动类当中也可以像下面一样声明Bean对象交给IOC容器管理。 

 @ComponentScan

前面有说过启动类具有包扫描的功能,原因就是启动类已经配置了一个组件扫描的注解。

@EnableAutoConfiguration

在上一篇文章有提到@Enablexxxx这种注解一般里面封装的都是@Import开头的注解,用来导入指定的Bean或者配置类。从其后半段可以看出这个就是自动配置的核心注解。

从下面可以看见这个注解底层封装了一个Import注解,value是一个ImportSelector接口的实现类的全类名。

AutoConfigurationImportSelector

在这个实现类当中会看见它实现了一个嵌套了多层的ImportSelector接口。

在ImportSelector接口中会实现一个selectImports方法,返回一个Stinrg数组,里面就是需要导入到spring 的IOC容器中的类。

下面是对 selectImports方法的接口实现

 关于它具体怎么实现的真的不想再看了,以后面试前再来看吧,这个手撕源码的内容。

里面 selectImports会返回本类下的一个方法,里面有一个报错信息,

在上面这个信息中可以看出需要的东西有一个spring.factories和springframework.boot.autoconfigure

No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

 在前一篇 文章中模拟的第三方依赖中可以看见有以下这个autoconfigure这个依赖。这个就是进行自动配置的依赖,也就是上面需要的配置文件依赖。

又比如在用到mybatis的时候,在mybatis的依赖下也会有一个autoconfigure的依赖如下所示 

 在左侧栏目里面有一个外部库,有springboot官方提供的jar包,里面可以看这些依赖里面具体都是些什么样的信息。

往下找可以看见上面需要的两个东西。

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. 

//SpringBoot后期提供的加载配置类的文件

spring.factories      

//SprngBoot早期提供的加载配置类的文件

在 spring.factories 当中如下所示,里面都是一些类的全类名。

 在另外一个文件当中也是一些全类名,最终在项目启动时都会加载并读取到IOC容器当中交给IOC容器管理。这些类后缀都是AutoConfiguration,都是自动配置的意思。这些类底层都会封装一个

@Configure注解,关于功能的具体实现都是在底层有涉及

 比如下面这个Gson就是google提供的处理Json格式数据的依赖的底层具体实现。

 

 然后我们在导入这个依赖后就可以直接拿来注入使用了,但是不是所有的配置类下的Bean对象都会被注册到IOC容器当中,像上图这样还会有一个@ConditionalOnMissingBean注解表示按条件装配,只有满足一定条件之后才会被注册到IOC容器当中。

总结

下一篇文章再看@ConditionalOnMissingBean注解如何进行条件装配。

传送门链接:

猜你喜欢

转载自blog.csdn.net/m0_62327332/article/details/130904732