整体上来说就是启动时会通过SpringApplication的构造函数调用SpringFactoriesLoader的loadSpringFactories,此处会加载calsspath中的每个spring.factories文件中类名,放到缓存中。后续会处理配置文件中的自动配置类
![](http://blog-1251934191.cos.ap-chengdu.myqcloud.com/wp-content/uploads/2018/12/006tNbRwly1fyjce7onajj31gm0u0as4.jpg)
@SpringBootApplication 注解等同于 spring 的包扫描@ComponentScan、java配置类@Configuration、自动配置@EnableAutoConfiguration ,所以当我们调用SpringApplication.run(XXApp.class,args);执行的时候,spring 会根据参数、classpath中的类,判断是否是web项目,创建对应的ApplicationContext,然后这个XXApp就是主配置类,同时因为@SpringBootAppliation注解具有ComponentScan的作用,所以也会扫描其他的配置类,@EnableAutoConfiguration注解上通过@Import指定了一个类叫做AutoConfigurationImportSelector,当XXApp这个配置类是通过ConfigurationClassParser的processDeferredImportSelectors 方法触发执行 processImports 然后将这些配置类进行初始化。
这些自动配置类上定义的@Bean有些是带有各种不同条件注解,满足条件的会被创建,通常是检测类是否在classpath或者是配置是否开启,或者是同时有哪些bean或者没有哪些bean
![](http://blog-1251934191.cos.ap-chengdu.myqcloud.com/wp-content/uploads/2018/12/006tNbRwly1fyjckxn5f8j30e60dstal.jpg)
了解 工作生活心情记忆 的更多信息
Subscribe to get the latest posts sent to your email.