Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · Jun 21, 2020 · 2394 views
    This topic created in 2164 days ago, the information mentioned may be changed or developed.
    用类 Abc 表示一个不存在的类,当代码中出现 Abc.class 时肯定会报错,首先 IDE 并没有找到这样一个类从而无法在文件顶部写好 import ....Abc ,进而编译器不知道你写了个什么东西,最终报错。

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

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

    谢谢
    3 replies    2020-06-21 09:57:33 +08:00
    raptium
        1
    raptium  
       Jun 21, 2020 via iPhone
    编译时的 classpath 和运行时的 classpath 可以不一样的
    Newyorkcity
        2
    Newyorkcity  
    OP
       Jun 21, 2020
    @raptium maven 的 dependency 中 scope=import ?于是在编译时有在运行时没有?
    zankard
        3
    zankard  
       Jun 21, 2020   ❤️ 1
    spring boot 用 asm 来解析 @ConditionalOnClass 的 metadata,文档上就已经说明了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1178 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:27 · PVG 07:27 · LAX 16:27 · JFK 19:27
    ♥ Do have faith in what you're doing.