spring boot 的 @ConditionalOnClass 怎么做到以 Class 为参数的?

2020-06-21 08:39:01 +08:00
 Newyorkcity
用类 Abc 表示一个不存在的类,当代码中出现 Abc.class 时肯定会报错,首先 IDE 并没有找到这样一个类从而无法在文件顶部写好 import ....Abc ,进而编译器不知道你写了个什么东西,最终报错。

也就是说如果类 Abc 不存在(自己的项目里没有创建这样一个类,项目的依赖中也没有这样一个类,最终导致文件顶部没有 import 这样一个类),@ConditionalOnClass(Abc.class) 根本就通不过编译不对么?

然后 spring boot 自动配置中 @ConditionalOnClass 使用时的意思是:当作为这个注解的参数的类存在时,才启用配置类。可是如果这个类不存在,不应该出现我上面说的问题:编译通不过,项目完全跑不起来。。。

谢谢
1887 次点击
所在节点    问与答
3 条回复
raptium
2020-06-21 08:40:06 +08:00
编译时的 classpath 和运行时的 classpath 可以不一样的
Newyorkcity
2020-06-21 08:41:55 +08:00
@raptium maven 的 dependency 中 scope=import ?于是在编译时有在运行时没有?
zankard
2020-06-21 09:57:33 +08:00
spring boot 用 asm 来解析 @ConditionalOnClass 的 metadata,文档上就已经说明了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/683413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX