
1、什么是自动装配自动装配自动配置是一种“约定大于配置”的机制根据项目中引入的依赖自动在Spring容器中创建和配置好我们需要的Bean简化开发流程。2、原理三个核心“启动类的注解”、“自动配置类”、“一系列的条件注解”启动类上的SpringBootApplication注解由多个注解构成其中的关键EnableAutoConfiguration它包含了Import({AutoConfigurationImportSelector.class})【自动装配的核心】通过import注解注入的 AutoConfigurationImportSelector类在内部1通过SpringFactoriesLoader扫描所有依赖下的META-INF/spring.factories文件2根据文件中指定的配置类加载相应的Bean的自动配置这些bean通常会使用条件注解来控制加载条件。例如ConditionalOnClass类路径中有某个类才加载ConditionalOnMissingBean容器中某个 Bean 不存在才加载Spring读到这些配置类的时候会判断条件是否符合不符合就直接跳过了。该类实现了ImportSelector接口内部的selectImports方法可以通过方法参数接收元数据信息AnnotationMetadata主要描述类上有哪些注解以及注解的属性值根据元数据有选择的加载Bean方法返回String数组内容是要加载的类的全限定名。3、自定义Starter知道了原理我们该如何自定义一个Starter让SpringBoot去自动装配上呢1自定义业务在以前的项目中我封装过一个文件上传组件最终需要注入到Spring中的是一个FileUploadService具体的业务代码就不展示了。2添加自动配置类创建CosStorageAutoConfiguration并添加上配置类注解Configuration在内部返回我们需要的Bean即可。ConfigurationEnableConfigurationProperties(CosProperties.class)publicclassCosStorageAutoConfiguration{。。。。。。。省略/** * 封装后的上传文件业务对象 */BeanpublicFileUploadServicefileUploadService(CosManagercosManager){returnnewFileUploadService(cosManager,cosProperties);}}3在指定目录下标记自动配置类2版本是META-INF/spring.factories3版本是META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports4在需要服务的模块中引入自定义Starter的pom坐标即可5验证启动项目后可以通过idea自带的Beans视图检查可以看到我们定义的配置类和业务Bean都已经被注册了