在springboot中,有@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnMissingClass,@ConditionalOnMissingBean等注解,这些注解的含义是有某个类或者没有某个bean才会加载,那么源码是在什么地方处理的呢,下面我们一起看下。
一、举例
我们以类EncryptionBootstrapConfiguration为例,它上面有注解:@ConditionalOnClass({ TextEncryptor.class })。
处理是在ConfigurationClassParser类的processConfigurationClass()方法中:
protected void processConfigurationClass(ConfigurationClass configClass) throws IOException {
if (this.conditionEvaluator.shouldSkip(configClass.getMetadata(), ConfigurationPhase.PARSE_CONFIGURATION)) {
return;
}
这个方法就是查看是否有满足条件的class或者bean。shoudSkip方法就是判断是否要跳过。这个方法前面都是获取注解的元数据,核心方法是在下面这段