- @ConditionalOnClass通常与@Configuration 结合使用,意思是当classpath中存在某类时满足条件,比如我们在使用spring提供的redis时,spring提供了两种客户端实现,根据用户添加的依赖来选择对应的实现。 那么问题来了,一般我们只会添加一个实现,另一个实现就会缺失(也就是说少包),那么@ConditionalOnClass(A.class)这行代码中A.claa就会报找不到类的编译错误。那spring是怎样把这个问题解决的呢?
通过springboot的代码分析,最终发现spring的解决方法:在打包时,通过maven或gradle的optional属性,将依赖加入到打包中生成class(optional属性的依赖并没有打入到spring-boot-autoconfigration的jar包中,而是由使用方来提供)
- 收获:spring-boot在集成很多第三方框架时都使用了这个技术,类似的还有kafka等等。我们在自己的框架中,对于可选的组件,也可以复用这个特征来实现。
注意:本文归作者所有,未经作者允许,不得转载