首页 > 编程知识 正文

springboot自动装配原理面试回答(springboot启动流程概述)

时间:2023-05-04 09:01:35 阅读:64492 作者:4221

从主启动类中选择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在启动时默认加载这些自动配置类,但未启用。 只有在部署了依赖关系包时,这些自动配置才会真正启用,如下图所示。 此按需加载原理基于条件注释实现。

条件注释很强大,所以这里不详细展开。 自己搜索或浏览其他文章。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。