从主启动类中选择importorg.spring framework.boot.spring application; importorg.spring framework.boot.auto configure.springbootapplication; @ springbootapplicationpublicclassmainapplication (publicstaticvoidmain ) string[]args ) springapplication.run (主应用程序) 要了解springboot是如何在spring boot web APP应用程序的条目类中组装的,必须知道名为@SpringBootApplication的注释。
1.@ springbootapplication @ springbootconfiguration @ enableautoconfiguration @ components can (classes=typeexcludefilter @filter(type=filtertype.custom,classes=autoconfigurationexcludefilter.class (} (public @ interfacespringbotapppppotappp
1.2.@ springbootconfiguration @ configuration public @ interfacespringbootconfiguration {其实,配置类,即条目类本身
1.3 .注释@ enableautoconfiguration表面上是指打开自动对齐。 cqdhn、springboot的自动组装机制应该与此注释有关。
@ autoconfigurationpackage @ import (autoconfigurationimportselector.class ) public @ interfaceeenableautoconfiguration (打开
@AutoConfigurationPackage :扫描我们自己编写的java类并注册到spring容器中的@ import (autoconfigurationimportselector.class ) )。将springboot提供的自动配置类添加到spring容器1.3.1.@ autoconfiguration package @ import (autoconfiguration packages.registrar.clastion @AutoConfigurationPackage注释实际上是在容器中引入了autoconfiguration packages.registrar的实例对象。请查看以下内容:
1.3.1.1.autoconfigurationpackages.registrarstaticclassregistrarimplementsimportbeandefinitionregistrar, eterminableimports { @ overridepublicvoidregisterbeandefinitions (annotationmetadatametadata,beandefinitionregistryraregistrata beandefinitionionistry newpackageimports (元数据).getPackageNames ).toArray (新字符串[0] ); ()其中
register(registry,newpackageimports (元数据).getPackageNames ).toArray ) newstring[0] ); 在这段代码中,其实我们已经完成了对自己写的班级的扫描。
newpackageimports (元数据).getpackagenames (.to array ) newstring[0] )获取指定扫描包的路径,如果未明确指定,则默认情况下,它是主扫描包
在调试模式下很容易看到。
具体注册细节暂时不深入。
1.3.2.@ import (autoconfigurationimportselector.class )的评论显然是将autoconfigurationimportselector的对象放在spring容器上
1.3.2.3 .名为autoconfigurationimportselector的类进行的是将springboot提供的自动部署加载到spring容器中。
这个班有办法:
protectedautoconfigurationentrygetautoconfigurationentry (annotationmetadataaannotationmetadata )此方法获取所有自动部署类的实体,然后调试
这127个类是在spring-boot-autoconfigure模块中定义的,如下图所示
spring-boot在启动时默认加载这些自动配置类,但未启用。 只有在部署了依赖关系包时,这些自动配置才会真正启用,如下图所示。 此按需加载原理基于条件注释实现。
条件注释很强大,所以这里不详细展开。 自己搜索或浏览其他文章。