SpringBoot自动装配
最近看了很多面试题,springboot自动装配原理有很多人问,然后就想写一篇配合着源码口语化说一下springboot自动装配的原理
Main方法
Main方法是java程序的入口,springboot的main方法下有一个run方法,我们点进源码
发现run方法点进去返回的还是一个run方法,我们在连续点两次run方法,直到我们看到我们的run方法:
里面最重要的是refreshContext方法,它能够刷新容器,它读你的配置文件,扫你的注解,只要你一刷新容器,他就会扫,于是你才可以在SpringBootApplication注解里往深的点。
SpringBootApplication
接下来,我们看到springboot配置类上面有一个@SpringBootApplication注解,我们点进去
里面有三个重要的注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
其中,
@SpringBootConfiguration:其实就是spring里面的Configuration注解,它是用来标注一个类为配置类的。
@ComponentScan:这个注解也是spring里面的,它是用来将指定包下面需要装配的组件注册到容器里面去。
第三个注解叫@EnableAutoConfiguration,这个注解是springBoot的自动配置的核心注解,他开启的springBoot的自动配置,他在里面引入了一个类,叫做AutoConfigurationImportSelector,
这个类会有一个核心方法,帮助我们从类路径下的meta-info的spring.factories下加载一些东西。
他会跟着很多很多的配置文件,配置类,他会加载所有的配置类,加载到容器里面,他里面有很多的条件注解,会根据你引入的jar包,注入的bean,把相应的bean自动的注入到我们的容器里面,于是就实现了自动装配。
总结:
总:springBoot启动类是一个main方法,里面调用的是SpringApplication的静态方法,run方法,在run方法里面能一直点进去另一个run方法,直到一个run方法里面有一个refreshContext(context),他能够刷新容器,他读你的配置文件,扫你的注解,只要你一刷新容器,他就会扫,于是你才可以在springBootApplication注解里往深的点。springBootApplication里面有一个重要的注解:@EnableAutoConfiguration,他开启的springBoot的自动配置,他在里面引入了一个类,叫做AutoConfigurationImportSelector,这个类会有一个核心方法,帮助我们从类路径下的meta-info的spring.factories下加载一些东西,他会跟着很多很多的配置文件,配置类,他会加载所有的配置类,加载到容器里面,他里面有很多的条件注解,会根据你引入的jar包,注入的bean,把相应的bean自动的注入到我们的容器里面,于是就实现了自动装配。
简:springBoot在启动的时候,会调用run方法,run方法会刷新容器,刷新容器的时候他会从类路径下找到spring.factories文件,在这个文件里面记录了好多自动配置类,我们会在启动的时候把这个配置类加载到容器里面,这些配置类里面有好多的条件注解,他会根据我们有没有引入相应的jar包,有没有注入一些bean来自动的给我们的容器注入我们需要的bean,于是就实现了自动装配
这个问题其实跟着点几次,然后把步骤印在脑海里,就能从run方法一直讲到spring.factories不断了,很快昂,啪的一下就能全部完整的说完了
祝大家面试顺利,都能拿到想要的工作 (▽)