例如,HttpEncodingAutoConfiguration使用@ConditionalOnClass(CharacterEncodingFilter.class)进行注释。
我对@ConditionalOnClass的了解是在类路径中承诺CharacterEncodingFilter,但是如果类不在classpath中,它怎么能在编译或类加载时通过。
非常感谢。
答案 0 :(得分:2)
ConditionalOnClass.value
上的javadoc给出了答案:
必须存在的类。由于此注释被解析 加载类字节码,这里可以安全地指定类 最终不在类路径上,只有这个注释是 直接在受影响的组件上,而不是如果使用此注释 作为一个组合的元注释。为了使用此注释作为 元注释,只使用name属性。
同样在编译时,你必须在类路径上有这样的类才能使用value
的{{1}}属性。
Spring-boot使用可选的依赖项来实现这一点。在maven中,这看起来像这样:
ConditionalOnClass
在gradle中,您通常使用compileOnly来实现此目标。