Springboot自动装配分析
一、首先创建一个简单的Springboot工程,并确保它能正常跑起来。我这边已经创建好一个
二、打开pom.xml文件,pom.xml主要分:1、父工程,parent标签,所有的核心依赖都在父工程中写明。2、springboot会把所有场景功能添加完毕,需要什么工程,只需要在dependence写starter启动器,就可以在工程中调用并使用。
相当于进入你创建的这个工程的“父”工程。
3、打开后看到,其还有父工程,标题id是“Spring-boot-dependencies,是这个Springboot项目所有的依赖,点击进去
4、进来后可以看到如下内容
通过description可以了解到这是xml文件的主要作用是Springboot的依赖配置,下面的属性properties就是当前Springboot工程所依赖的所有jar包,上面有标注jar包的版本号
三、
1、打开Springboot工程的启动函数,可以看到上面有个@SpringBootApplication注解来标注这是springboot应用
2、进入这个注解
3、重点是这三个注解,按照注解的结构进行tab隔开,结构如下
#Springboot的配置文件 @SpringBootConfiguration #进入有一个Spring的Configuration注解 @Configuration #再进去有一个@Comonent注解说明其本质还是一个Spring @Component
@ComponentScan
#自动扫描目标包内的文件,加载到Springboot容器中
#重点是中间这个,开启自动配置文件
1 #开启自动配置文件 2 @EnableAutoConfiguration 3 #其中的重要注解是AutoConfigurationPackage 4 @AutoConfigurationPackage 5 #导入选择器 6 @Import(AutoConfigurationPackages.Registrar.class) 7 #进入AutoConfigurationPackages这个类看看导入哪些选包 8 9 #进入Registrar.class这个类看看导入哪些注册器 10 ImportBeanDefinitionRegistrar//一些定义和已经注册的bean 11 metaData//注解元数据,注册元数据,导入元数据 12 #导入选择器,这个跟AutoConfigurationPackage是同级的 13 @Import(AutoConfigurationImportSelector.class) 14 #加载元数据 15 selectImports//这个方法加载元数据 16 #加载自动配置 17 getAutoConfigurationEntry//这个方法获取加载自动配置的入口 18 #getAutoConfigurationEntry方法中有一个getCandidateConfigurations函数获取所有候选配置 19 getCandidateConfigurations() 20 #里面主要有三项 21 #第一项获取所有的配置文件,new ArrayList的参数SpringFactoriesLoader函数的参数有两个加载器 22 #loadFactoryNames 23 loadFactoryNames//获取一个SpringFacotryName,会从这个函数中加载spring.factories配置文件,这个函数里面有下面两个参数 24 #进入loadFactoryNames,loadSpringFactories在这个函数里面会把所有配置加载到一个properties变量里面 25 getBeanClassLoader//BeanClass的加载器 26 #getSpringFactoriesLoaderFactoryClass 27 getSpringFactoriesLoaderFactoryClass//返回一个类,意思是所有标有@EnableAutoConfiguration的类都会自动装配 28 #第二项:导入所有候选的加载器 29 ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add); 30 #第三项:导入Springboot自动装配的核心文件,spring.factories,这个配置文件在在spring-boot-autoconfiguration包里面 31 Assert.notEmpty()