电脑装机网站,wordpress替换图片,郑州建设银行官网站,我有域名怎么做网站一、什么是自动装配
在使用SpringBoot的时候#xff0c;会自动将Bean装配到IoC容器中。例如我们在使用Redis数据库的时候#xff0c;会引入依赖spring-boot-starter-data-redis。在引入这个依赖后#xff0c;服务初始化的时候#xff0c;会将操作Redis需要的组件注入到IoC…一、什么是自动装配
在使用SpringBoot的时候会自动将Bean装配到IoC容器中。例如我们在使用Redis数据库的时候会引入依赖spring-boot-starter-data-redis。在引入这个依赖后服务初始化的时候会将操作Redis需要的组件注入到IoC容器中进行后续使用
自动装配大致过程如下
获取到组件例如spring-boot-starter-data-redisMETA-INF文件夹下的spring.factories文件
spring.factories文件中列出需要注入IoC容器的类
将实体类注入到IoC容器中进行使用
二、自动装配原理
自动装配大致流程是通过SpringBootApplication进行实现这个注解声明在SpringBoot的启动类上
1、SpringBoot启动类 2、SpringBootApplication注解
SpringBoot启动类SpringBootApplication 3、SpringBootConfiguration注解
SpringBoot启动类SpringBootApplicationSpringBootConfiguration 通过SpringBootConfiguration注解标识SpringBootApplication是一个SpringBoot配置类
AliasFor注解用于为注解属性声明别名SpringBootApplication注解也有AliasFor注解
4、EnableAutoConfiguration注解
SpringBoot启动类SpringBootApplicationEnableAutoConfiguration 通过EnableAutoConfiguration注解实现自动装配
5、AutoConfigurationPackage注解SpringBoot启动类SpringBootApplicationEnableAutoConfigurationAutoConfigurationPackage 通过AutoConfigurationPackage注解将添加该注解的类所在的package作为自动配置package进行管理
通过AutoConfigurationPackages工具类获取自动配置package列表也就是说当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package
6、EnableAutoConfiguration注解最重要的是AutoConfigurationImportSelector.class将需要装配的类装配到IoC容器中下面重点分析一下这个类的实现
三、核心类分析
1、selectImport方法 AutoConfigurationImportSelector中的selectImport方法是自动装配的核心实现它主要是读取META-INF/spring.factories文件经过去重、过滤返回需要装配的配置类集合
2、getAutoConfigurationEntry方法
selectImport方法getAutoConfigurationEntry方法 getAttributes方法获取EnableAutoConfiguration中的exclude、excludeName等
getCandidateConfigurations方法获取所有自动装配的配置类也就是读取spring.factories文件后面会再次说明
removeDuplicates方法去除重复的配置项
getExclusions方法根据EnableAutoConfiguration中的exclude、excludeName移除不需要的配置类
fireAutoConfigurationImportEvents方法广播事件
最后根据多次过滤、判重返回配置类合集
3、getCandidateConfigurations方法
selectImport方法getAutoConfigurationEntry方法getCandidateConfigurations方法 通过loadFactoryNames方法扫描classpath下的META-INF/spring.factories文件里面是以keyvalue形式存储读取其中keyEnableAutoConfigurationvalue就是需要装配的配置类也就是getCandidateConfigurations返回的值
四、总结
1通过注解SpringBootApplicationEnableAutoConfigurationImport({AutoConfigurationImportSelector.class})实现自动装配
2AutoConfigurationImportSelector类中重写了ImportSelector中selectImports方法批量返回需要装配的配置类
3通过Spring提供的SpringFactoriesLoader机制扫描classpath下的META-INF/spring.factories文件读取需要自动装配的配置类
4依据条件筛选的方式把不符合的配置类移除掉最终完成自动装配