例如,HttpEncodingAutoConfiguration带有@ConditionalOnClass(CharacterEncodingFilter.class)注释。
我对@ConditionalOnClass的了解是要在classpath中保证CharacterEncodingFilter,但是如果该类不在classpath中,那么它将如何在编译或加载类时通过。
非常感谢。
最佳答案
ConditionalOnClass.value
上的javadoc给出了答案:
必须存在的类。由于此注释是由解析的
加载类字节码,在此处指定可能会安全的类
最终不位于类路径上,仅当此注释为
直接在受影响的组件上,如果使用此注释则不
作为组成的元注释。为了将此注释用作
元注释,仅使用name属性。
同样在编译时,您必须在类路径上具有此类,才能使用value
的ConditionalOnClass
属性。
Spring-boot使用可选的依赖项来实现这一点。在Maven中,这看起来像这样:
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>4.0.4</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
在gradle中,通常使用compileOnly来实现。
关于spring-boot - SpringBoot @ConditionalOnClass如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47787538/