考察目的
@Condition是Spring4.x版本引入的一个注解,由于这个问题本身比较简单,所以考察范围一般是工作1到3年左右。
考察目的就是了解求职者对Spring Framework里面注解的了解情况。
作为求职者,回答的时候不过过度解读面试官的意图,简单明了的回复即可。
问题分析
@Conditional是Spring4版本里面提供的注解,它的作用是给需要装载的Bean增加一个条件判断,只有满足条件的Bean才会装载到IOC容器。
@Conditional注解的定义如图所示,从这个注解中可以了解到几个关键信息
1、@Conditional注解可以修饰在类或者方法上
2、@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
等注解,使得我们在使用的过程中不再需要去写条件的逻辑。
总结
这个问题很好回答,切记不要绕来绕去说一大堆。