为什么说@Conditional才是SpringBoot的基石

说起 SpringBoot,人们能想起一大堆的名词来形容它的好。但是说到 SpringBoot 的核心是什么?是什么技术或功能才让它如此优秀?很多人答非所问。当然我回答的也不一定能让大家满意,但我认为 @Conditional 注解才是 SpringBoot 的基石。

为什么说@Conditional才是SpringBoot的基石
BAT 都爱问的 SpringBoot 面试题

为什么这么说,且听本文分解。

@Conditional 是由 Spring 4 提供的一个新特性,用于根据特定条件来控制 Bean 的创建行为。而在我们开发基于 Spring 的应用的时候,难免会需要根据条件来注册 Bean。

比如,我们要根据不同的环境实例化不同的 DataSource,那么我们就可以使用 @Profile 注解来实现。但是,当你查看 @Profile 源码后,发现其实它是通过 @Conditional 注解来实现的。
在 SpringBoot 中,我们都知道有一个功能叫“自动配置”。但是 AutoConfigure 是怎样进行的呢?答案就是 @Conditional,以及它衍生出来的 @ConditionalOnBean、@ConditionalOnClass、@ConditionalOnProperty 等。

这一点你可以通过 @EnableAutoConfiguration,@Import,EnableAutoConfigurationImportSelector 以及SpringFactoriesLoader.loadFactoryNames() 来验证。SpringFactoriesLoader 类用来扫描加载含有 META-INF/spring.factories 文件的 jar 包,该文件记录了具有哪些自动配置类。然后你在 spring.factories 文件中随便找一个自动配置类。最终通过源码,你会发现它们背后的成功都有一个 @Conditional 或者其衍生的注解在支持。

所以,我认为 @Conditional 才是 SpringBoot 的基石。

更多关于 SpringBoot 的面试题,请关注我的个人小程序。

为什么说@Conditional才是SpringBoot的基石

: » 为什么说@Conditional才是SpringBoot的基石

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/252091.html

(0)
上一篇 2022年5月4日
下一篇 2022年5月4日

相关推荐

发表回复

登录后才能评论