自动装配其实就是依赖注入的升级版本,是为了简化依赖注入的配置而生成的。在传统的依赖注入中,我们必须要明确给属性装配的是哪一个bean的引用,也可以叫做手动装配。在bean很多的情况下,是非常不方便的。
因此,SpringBoot采用注解来进行自动装配。用户不需要知道属性具体要装配哪一个bean,只需要代码中加入注解,剩余的对bean的识别工作交由Spring来完成。也就是说,自动装配就是将依赖注入"自动化"后的一个升级版本。
2、自动装配的优点- 让所有的spring开发者更快的入门
- 开箱即用,提供各种默认配置
- 内嵌式容器简化web项目
- 没有冗余代码生成和xml配置的要求
- 当启动springboot应用程序的时候,会创建SpringApplication的对象,在这个对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器。在这个过程中会加载整个应用程序中的spring.factories文件,将文件内容放到缓存中,方便后续处理
- SpringApplication对象创建完毕之后,开始执行run方法,来完成整个项目的启动。启动过程中最主要的有两个方法,第一个叫prepareContext,第二个叫refreshContext,在这两个关键步骤中完成了自动装配的核心功能。前面的(prepareContext)处理逻辑包含了上下文对象的创建、banner的打印、异常报告期的准备等工作,方便后续的调用。
- 在prepareContext方法中主要完成的是对上下文对象的初始化操作,包括属性值的设置,比如环境对象。在整个过程中有个非常重要的方法叫做load,这个方法主要完成一件事:将当前启动类作为一个beanDefinition注册到registry中,方便后续在进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,来完成@SpringBootApplication,@EnableAutoConfiguration等注解的解析工作
- 在refreshContext方法中会进行整个容器的刷新工作过程,会调用spring中的refresh方法。refresh中有13个非常关键的方法来完成整个spring应用程序的启动。在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,这是BeanFactoryPostProcessor的子类,也是BeanDefinitionRegistryPostProcessor的子类,在调用的时候,会先调用BeanDefinitionRegistryPostProcessor中的postProcessBeanDefinitionRegistry方法,然后调用postProcessBeanFactory方法。在执行postProcessBeanDefinitionRegistry的时候会解析处理各种注解,包含@PropertySource、@ComponentScan、@ComponentScans、@Bean和@Import,主要的是@Import注解的解析
- 在解析@Import注解的时候,会有一个getImports方法,从主类开始递归解析注解,把包含@Import的注解
都解析到,然后再processImport方法中对Import的类进行分类,此处主要是为了识别,AutoConfigurationImportSelet归属于ImportSelect的子类,再后续过程中会进行调用deferredImportSelectorHandler中的process方法,来完成EnableAutoCongratulation的加载 - 以上是我对springboot自动装配的简单理解,您看下我回答的有没有问题,帮我指点一下



