V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · 2020-06-21 08:39:01 +08:00 · 1885 次点击
    这是一个创建于 1635 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用类 Abc 表示一个不存在的类,当代码中出现 Abc.class 时肯定会报错,首先 IDE 并没有找到这样一个类从而无法在文件顶部写好 import ....Abc ,进而编译器不知道你写了个什么东西,最终报错。

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

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

    谢谢
    3 条回复    2020-06-21 09:57:33 +08:00
    raptium
        1
    raptium  
       2020-06-21 08:40:06 +08:00 via iPhone
    编译时的 classpath 和运行时的 classpath 可以不一样的
    Newyorkcity
        2
    Newyorkcity  
    OP
       2020-06-21 08:41:55 +08:00
    @raptium maven 的 dependency 中 scope=import ?于是在编译时有在运行时没有?
    zankard
        3
    zankard  
       2020-06-21 09:57:33 +08:00   ❤️ 1
    spring boot 用 asm 来解析 @ConditionalOnClass 的 metadata,文档上就已经说明了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5369 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 02:55 · PVG 10:55 · LAX 18:55 · JFK 21:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.