1. 相同点
- 都用使用
@Configuration
注解.可以加 ·@Bean
、@Import
、@ImportResource.
- 用
@Condition
来控制加载条件.
2 不同点
2.1 使用方式
- @Configuration –
Application
的用户,直接代码进行配置的。 - AutoConfiguration 是给
Springboot 插件
(xxxx.xxx.starter)使用用的。
2.2 加载的方式
@Configuration
加载是由@ComponentScan
指定的package,未指定 以ApplicationClass
所属package
开始。AutoConfiguration
是通过classpath*:META-INF/spring.factories
来被发现。 通过 keyorg.springframework.boot.autoconfigure.EnableAutoConfiguration. AutoConfiguration
是由import selector
的方式加载的@Configuration
先于AutoConfiguration
加载
3 需要注意
-
·
AutoConfiguration
可以使用@AutoConfigureOrder
或者@AutoConfigureBefore
、@AutoConfigureAfter
作为注解 -
AutoConfiguration的class
所属包
在@ComponentScan
,被认为既是Configuration
,又是AutoConfiguration
。所以会被加载两次
。 先以Configuration身份
时先 加载。 因此@AutoConfigureBefore
、@AutoConfigureAfter
不起作用
。 -
AutoConfiguration定义了
BeanPostProcessor
,
BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口--> Spring IOC容器实例化Bean --> 调用BeanPostProcessor的postProcessBeforeInitialization方法 --> 调用bean实例的初始化方法 --> 调用BeanPostProcessor的postProcessAfterInitialization方法
Spring容器通过
BeanPostProcesso
r给了我们一个机会对Spring管理的bean进行再加工 -
AutoConfiguration 使用
ImportBeanDefinitionRegistrar
-
AutoConfiguration 使用
ImportSelector