Java基础、中级、高级、架构面试资料

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

JAVA herman 2183浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

说起 SpringBoot,人们能想起一大堆的名词来形容它的好。但是说到 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 的面试题,请关注我的个人小程序。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 为什么说@Conditional才是SpringBoot的基石