1、当SpringBoot应用启动的时候,就从主方法里面进行启动的。
作用:标注在某个类上说明这个类是SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
2.一般看起来简单的东西,原理一般都不简单,我们点进@SpringBootAppllication看看
3.经过分析之后,我们发现三个核心注解
这个注解在Spring中很重要 ,它对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
作用:SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
我们继续进去这个注解查看
发现一个Configration,在Spring中我们学过的一个东西。如果还不明白继续向下点,我们发现它最后由@Component注解管理,在spring中有着@Controller,@Service,@repository,@Component四大常用注解,意思是将类变为一个组件,好让扫描器扫描自Spring自动装配到容器中。
到这我们解决了装配的问题,还剩一个注解,那么它到底是怎么实现"自动"的呢,那我们看看@EnableAutoConfiguration这个注解。点进去。
@EnableAutoConfiguration :开启自动配置功能
作用:以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 ;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效;
点进去又发现两个注解,看来得好好分析一下,先说下
@AutoConfigurationPackage:自动配置包
@import :Spring底层注解@import , 给容器中导入一个组件
Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器 ;
点进Registrar.class,找到,打好断点,运行程序
new AutoConfigurationPackages.PackageImport(metadata)).getPackageName() 右击打开
这样我们就能看他是代表我们com.pring下的总包
在返回去看刚刚的结论,你就能很轻松的明白了。回到上一个,我们还剩一个@Import({AutoConfigurationImportSelector.class}) :给容器导入组件 ;
区分一下,将我们的开发项目一个个变成bean注入到容器中,这个是我们在开发开始时导入的依赖变成bean将它注入到容器中。。。 个人理解而已,仅供参考
那么它是怎么获取到系统开发时所用的配置呢?点进去看。
我们发现一个List类型的变量。点进这个方法。
我们发现它又调用了一个loadFactoryNames的方法。再点进去发现一个发现一个多次出现的文件:spring.factories,全局搜索它 Ctrl+f
我们发现自动配置的spring.factories从我们Springboot版本包里面自动配置了一份到它的包下,里面有我们开发初期所用的依赖。
那是不是所有导进来的配置类都会生效?
答案是否定的,我们随便点进一个类去看,发现ConditionXXX这个注解,英文翻译就条件的意思,那么条件哪来呢,
spring-boot-starter 是pom.xml里面配置的启动器,向我们配完
spring-boot-starter-web时 他就会跟我们导入的配置类进行比较,是否导入web模块的依赖,不得不说是很精妙的设计
所以,自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。
结论:
SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
最后希望点进来的人都有收获,能理解springboot,如有错误请按照官方文档要求,仅做学习交流使用,再送你们一张简单的脑图
作者:狂神小忠粉
原文:https://www.cnblogs.com/420ITboy/p/12498044.html