Java SpringBoot如何实现基于条件的自动配置?

Java SpringBoot如何实现基于条件的自动配置?

请先 登录 后评论

1 个回答

肖秋平 | 奈学教育 - 奈学教育 | 金牌讲师
擅长:架构师

基于条件的自动配置来源于Spring框架中“基于条件的配置”这一特性。在Spring框架中,我们可以使用@Conditional这个Annotation配合@Configuration或者@Bean等Annotation来干预一个配置或者bean定义是否能够生效,其最终实现的效果或者语义类似于如下伪代码: if(符合@Conditional规定条件){ 加载当前配置或者注册当前bean定义; } 要实现基于条件的配置,我们只要通过@Conditional指定自己的Condition实现类就可以了(可以应用于类型Type的标注或者方法Method的标注): @Conditional({MyCondition1.class, MyCondition2.class}) 最主要的是,@Conditional可以作为一个Meta Annotation用来标注其他Annotation实现类,从而构建各色的复合Annotation,比如SpringBoot的autoconfigure模块就基于这一优良的革命传统,实现了一批这样的Annotation (位于org.springframework.boot.autoconfigure.condition包下):@Conditional On Class@Conditional On Bean@Conditional On Missing Class@Conditional On Missing Bean@Conditional On Property……有了这些复合Annotation的配合,我们就可以结合@EnableAuto-Configurationn实现基于条件的自动配置了。SpringBoot能够风靡,很大一部分功劳需要归功于它预先提供的一系列自动配置的依赖模块,而这些依赖模块都是基于以上@Conditional复合Annotation实现的,这也意味着所有的这些依赖模块都是按需加载的,只有符合某些特定条件,这些依赖模块才会生效,这也就是我们所谓的“智能”自动配置。

请先 登录 后评论