栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于SpringBoot自动装配原理的一些简单分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于SpringBoot自动装配原理的一些简单分析

1、springboot自动装配是什么,解决了什么问题

自动装配其实就是依赖注入的升级版本,是为了简化依赖注入的配置而生成的。在传统的依赖注入中,我们必须要明确给属性装配的是哪一个bean的引用,也可以叫做手动装配。在bean很多的情况下,是非常不方便的。

因此,SpringBoot采用注解来进行自动装配。用户不需要知道属性具体要装配哪一个bean,只需要代码中加入注解,剩余的对bean的识别工作交由Spring来完成。也就是说,自动装配就是将依赖注入"自动化"后的一个升级版本。

2、自动装配的优点
  1. 让所有的spring开发者更快的入门
  2. 开箱即用,提供各种默认配置
  3. 内嵌式容器简化web项目
  4. 没有冗余代码生成和xml配置的要求
3、自动装配实现原理
  1. 当启动springboot应用程序的时候,会创建SpringApplication的对象,在这个对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器。在这个过程中会加载整个应用程序中的spring.factories文件,将文件内容放到缓存中,方便后续处理
  2. SpringApplication对象创建完毕之后,开始执行run方法,来完成整个项目的启动。启动过程中最主要的有两个方法,第一个叫prepareContext,第二个叫refreshContext,在这两个关键步骤中完成了自动装配的核心功能。前面的(prepareContext)处理逻辑包含了上下文对象的创建、banner的打印、异常报告期的准备等工作,方便后续的调用。
  3. 在prepareContext方法中主要完成的是对上下文对象的初始化操作,包括属性值的设置,比如环境对象。在整个过程中有个非常重要的方法叫做load,这个方法主要完成一件事:将当前启动类作为一个beanDefinition注册到registry中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@SpringBootApplication,@EnableAutoConfiguration等注解的解析工作
  4. 在refreshContext方法中会进行整个容器的刷新工作过程,会调用spring中的refresh方法。refresh中有13个非常关键的方法来完成整个spring应用程序的启动。在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,这是BeanFactoryPostProcessor的子类,也是BeanDefinitionRegistryPostProcessor的子类,在调用的时候,会先调用BeanDefinitionRegistryPostProcessor中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法。在执行postProcessBeanDefinitionRegistry的时候会解析处理各种注解,包含@PropertySource、@ComponentScan、@ComponentScans、@Bean和@Import,主要的是@Import注解的解析
  5. 在解析@Import注解的时候,会有一个getImports方法,从主类开始递归解析注解,把包含@Import的注解
    都解析到,然后再processImport方法中对Import的类进行分类,此处主要是为了识别,AutoConfigurationImportSelet归属于ImportSelect的子类,再后续过程中会进行调用deferredImportSelectorHandler中的process方法,来完成EnableAutoCongratulation的加载
  6. 以上是我对springboot自动装配的简单理解,您看下我回答的有没有问题,帮我指点一下
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号