Springboot自动装配
2022-08-09 14:31:29 6 举报
xxx
作者其他创作
大纲/内容
@Import(AutoConfigurationImportSelector.class)完成自动装配
......
注解的意义@Inherited,表明使用注解(@SpringBootApplication)能被子类基础@SpringBootConfiguration,基本上等同于@Configuration,表明这是一个配置类@ComponentScan注解的默认扫描范围是类 x. java所在目录及其下的所有子包。
Spring5.x
Spring4.x,DeferredImportSelector需要调用getImportGroup方法
315.refreshContext(context);刷新容器,由IOC容器解析@SpringBootApplication注解
IOC容器会调用AutoConfigurationGroup实例的process方法,再调用AutoConfigurationGroup实例的selectImports,仍然是通过SPI去spring.factories找EnableAutoConfiguration的实现类
@EnableAutoConfiguration
SpringApplication314 prepareContext准备IOC容器上下文,设置一些环境,设置start为配置启动类,准确进行容器的refresh,完成bean的实例化
Spring4.x,DeferredImportSelector接口同样调用selectImports方法
注意,Import注解是在解析Configuration注解内部进行解析的,然后递归解析的Import注解,所以说,总有一个Import注解应该要配合Configuration注解使用。解析import注解的过程中,处理ImportSelector接口的实现类时,对其中DeferredImportSelector接口的实现者,会先存储,在所有的ImportSelector接口处理完后,才会在之后合适的时间处理DeferredImportSelector接口,这样就保证了DeferredImportSelector接口在再最后才解析。(这样是因为DeferredImportSelector接口主要用在Springboot的自动装配中使用,需要等其他的bean完成了实例化,才会在最后进行自动装配----使自动配置类的条件注解能真正生效)但是,在DeferredImportSelector接口的处理上,Spring4.x和Spring5.x存在版本差异,前置也是直接调用接口的selectImports方法,返回自动配置类集合后者会绕一下。
getImportGroup,返回AutoConfigurationGroup.class对象,(AutoConfigurationGroup是AutoConfigurationImportSelector的内部类)
调用AutoConfigurationImportSelector#selectImports方法获取、并返回自真正生效的自动配置类集合
@AutoConfigurationPackage该注解主要是向IOC容器内注入一个AutoConfigurationPackages类,提供一个查询包扫描路径的方法
0 条评论
下一页