SpringBoot @ConditionalOnClass如何工作?

时间:2017-12-13 07:20:37

标签: spring-boot

例如,HttpEncodingAutoConfiguration使用@ConditionalOnClass(CharacterEncodingFilter.class)进行注释。

我对@ConditionalOnClass的了解是在类路径中承诺CharacterEncodingFilter,但是如果类不在classpath中,它怎么能在编译或类加载时通过。

非常感谢。

1 个答案:

答案 0 :(得分:2)

ConditionalOnClass.value上的javadoc给出了答案:

  

必须存在的类。由于此注释被解析   加载类字节码,这里可以安全地指定类   最终不在类路径上,只有这个注释是   直接在受影响的组件上,而不是如果使用此注释   作为一个组合的元注释。为了使用此注释作为   元注释,只使用name属性。

同样在编译时,你必须在类路径上有这样的类才能使用value的{​​{1}}属性。

Spring-boot使用可选的依赖项来实现这一点。在maven中,这看起来像这样:

ConditionalOnClass

在gradle中,您通常使用compileOnly来实现此目标。