“@Conditional注解有什么用?”
但凡有Java开发经验的同学,这个问题应该都要能回答出来。
如果回答不上来,建议认真看完这篇文章。
大家好,我是Mic,咕泡科技的联合创始人。
考察目的
@Condition是Spring4.x版本引入的一个注解,由于这个问题本身比较简单,所以考察范围一般是工作1到3年左右。
考察目的就是了解求职者对Spring Framework里面注解的了解情况。
作为求职者,回答的时候不过过度解读面试官的意图,简单明了的回复即可。
问题分析
@Conditional是Spring4版本里面提供的注解,它的作用是给需要装载的Bean增加一个条件判断,
只有满足条件的Bean才会装载到IOC容器。
@Conditional注解的定义如图所示,从这个注解中可以了解到几个关键信息
-
@Conditional注解可以修饰在类或者方法上
-
@Conditional注解可以接收一个或多个实现了Condition接口的类。
Condition接口的定义如图所示,它提供了一个返回值为boolean的matches方法,基于@Conditional本身的作用
不难猜出它应该是用来实现Bean是否能被装载的判断逻辑的。
@Conditional注解既然是用来判断Bean是否能被装载的条件,那么意味着我们可以在Bean的描述逻辑上增加这样一个注解然后通过重写Condition接口的matches方法,自定义Bean装载的条件。
比如下图这种使用方法,当Spring解析这个配置类的时候,HelloService这个bean是否能被装载到IOC容器,取决于CustomizeCondition里面的matches方法的返回值,返回true才可以被装载。
这就给我们Bean的装载过程增加了很多的灵活性。
高手:
@Conditional注解的作用是为Bean的装载提供了一个条件判断。
只有满足条件的情况下,Spring才会把当前Bean装载到IOC容器中。
这个条件的实现逻辑,我们可以实现Condition接口并重写matches方法自己去实现。
所以@Conditional注解增加了Bean装载的灵活性。
在Spring Boot里面,对@Conditional注解做了更进一步的扩展,比如增加了@ConditionalOnClass、@ConditionalOnBean等注解,使得我们在使用的过程中不再需要去写条件的逻辑。
总结
这个问题很好回答,切记不要绕来绕去说一大堆,大家可以直接参考高手的回答。
好的,今天的文章就到这里结束了,喜欢这个作品的小伙伴记得点赞收藏加关注!!!
另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!