自动装配原理
一个springBoot项目,只要添加相关的依赖,无需配置,启动main方法就行,并且可以对全局变量文件application.properties或application.yml对项目进行设置
springBoot还定义了一套接口规范:Spring Boot在启动时,会扫描jar外部引用jar包中的META-INF/spring. factories文件,将文件中的配置信息加载到spring容器中,并执行定义中的各项操作
@SpringBootApplication
@SpringBootApplication是核心注解
可以把@SpringBootApplication看作是:
@SpringBootConfiguration
、@EnableAutoConfiguration
和@Componetscan
这三个注解的集合
@SpringBootConfiguration:允许在上下文中注册额外的bean或者导入其他配置项
@EnableAutoConfiguration:启动SpringBoot的自动配置机制
@Componetscan:扫描被@Compent(@Service、@Controller)注解的bean,注解是会默认扫描启动类所在的包下的所有类,也可以定义不扫描bean
@EableAutoConfiguration注解的源码
自动装配的核心是通过AutoConfigurationUmportSelector实现的,查看源码分析:
AutoConfigurationUmportSelector
最终实现了ImportSelector接口,也实现了ImportSelector接口中的selectImports方法。
selectImport
作用:获取所有符合条件的全限定类名,这些类需要被加载到IOC容器中:
getAutoConfigurationEntry
:主要负责加载自动配置类
自动装配源码执行流程
源码对应如图:
第一步
跳到isEnabled方法判断自动装配是否开启,默认true
第二步
通过调用SpringFactoriesLoader.loadFactoryName()获取exclude和excludeNama
第三步
获取所需要自动装配的所有配置类,读取META-INF/spring.factories,经过筛选,满足条件的类会被加载
总结
SpringBoot通过@EnableAutoConfiguration
开启自动配置,通过SpringFactoriesLoader
最终加载META-NIF/spring.factories
中的自动配置类实现自动装配,自动装配其实就是通过@Conditional
按需求加载的配置类,想要其生效就必须引入相应的spring-boot-start-xxxx依赖