@ConditionalOnClass/@ConditionalOnMissingClass
使用场景
和@Configuration一起使用,用于条件注入
问题一
为什么我们使用的第三方jar中,指定的类型不存在,第三方jar在编译时仍然通过?还打出了jar包?
下图为spring-boot-autoconfigure
中的一个配置类SecurityDataConfiguration
。为什么SecurityEvaluationContextExtension
不存在,但是spring-boot-autoconfigure
在编译打包时却能成功?
其实这里有个误区,spring-boot-autoconfigure
在编译打包时,SecurityEvaluationContextExtension
是存在的。
spring-boot-autoconfigure
maven中导入了SecurityEvaluationContextExtension
所在jar的坐标,所以可以通过编译。但是在maven中导入这个jar包时指定了<optional>true</optional>
,所以依赖不会传递到我们的工程。我