SpringBoot总结分享自动化配置原理

文章资讯 2020-06-17 22:29:53

SpringBoot总结分享自动化配置原理

绪论
什么是SringBoot?
SringBoot是所有基于Sring开发的项目的起点。SringBoot的设计是为了让你尽可能快的跑起来Sring应用程序并且尽可能减少你的配置文件。简单来说就是SringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,sringboot整合了所有的框架(不知道这样比喻是否合适)。
SringBoot四个主要特性SringBootStarter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
自动配置:SringBoot的自动配置特性利用了Sring4对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
命令行接口:(Command-ne-interface,CLI):SringBoot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Sring应用的开发;
Actuatir:它为SringBoot应用的所有特性构建一个小型的应用程序。但首先,我们快速了解每项特性,更好的体验他们如何简化Sring编程模型。Sringboot遵循“约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来。Sringboot还为大量的开发常用框架封装了starter,如今引入框架只要引入一个starter,你就可以使用这个框架,只需少量的配置甚至是不需要任何配置。
源码
@SringBootAcation
一切缘起@SringBootAcation注解。@SringBootAcation注解是SringBoot的核心注解。目前实际项目开发中,该注解标注的类为主启动类,即运行如下代码的main方法作为入口,一般在main方法中使用SringAcation.run()来启动整个应用。
@SringBootAcation
ubcclassInformalEssayAcation{ubcstaticvoidmain(String[]args){
SringAcation.run(InformalEssayAcation.class,args);
}}
@SringBootAcation是一个复合注解或派生注解。下面我们跟进该注解,细品它的核心组成。
@Target(ElementTye.TYPE)
@Retention(RetentionPocy.RUNTIME)
@Documented
@Inherited
@SringBootConfiguration
@EnableAutoConfiguration
@ComonentScan(excludeFilters={
@Filter(tye=FilterTye.CUSTOM,classes=TyeExcludeFilter.class),
@Filter(tye=FilterTye.CUSTOM,classes=AutoConfigurationExcludeFilter.class)})
ubc@interfaceSringBootAcation{
省略详细方法
}实际开发项目中定义变量名时,一般要求大家见名知意,因此针对本篇文章的主题:自动化配置,那么从上面代码中我们可以找到对应的注解即@EnableAutoConfiguration.
@EnableAutoConfiguration
这个注解也是一个派生注解,其中的关键功能由@Imort提供,其导入的AutoConfigurationImortSelector的selectImorts()方法通过SringFactoriesLoader.loadFactoryNames()扫描所有具有META-INFsring.factories的jar包。sring-boot-autoconfigu-x.x.x.x.jar里就有一个这样的sring.factories文件。
@Target(ElementTye.TYPE)
@Retention(RetentionPocy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Imort(AutoConfigurationImortSelector.class)
ubc@interfaceEnableAutoConfiguration{ StringENABLED_OVERRIDE_PROPERTY="sring.boot.enableautoconfiguration";
Class<?>[]exclude()defat{};
String[]excludeName()defat{};}这个sring.factories文件也是一组一组的key=value的形式,其中一个key是EnableAutoConfiguration类的全类名,而它的value是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔,如下图所示:总结
综合以上,可以理解为@EnableAutoConfiguration注解通过@SringBootAcation被间接的标记在了SringBoot的启动类上。在SringAcation.run(…)的内部就会执行selectImorts()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Sring容器中。