说起 SpringBoot,人们能想起一大堆的名词来形容它的好。但是说到 SpringBoot 的核心是什么?是什么技术或功能才让它如此优秀?很多人答非所问。当然我回答的也不一定能让大家满意,但我认为 @Conditional 注解才是 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的基石
原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/252091.html