源码跟踪
从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注解如何进行条件装配。
传送门链接: