gpt4 book ai didi

java - 带 @Conditional 的完全限定类名

转载 作者:行者123 更新时间:2023-12-02 00:58:39 24 4
gpt4 key购买 nike

在有关 Spring Boot 和自动配置的类(class)视频中

enter image description here

它说我们可以使用完全限定的类名 type = { "a.b.c.Foo"} 而不是 value = { Foo.class } 如果我们不这样做想要在编译时依赖类对象。

你能解释一下这意味着什么吗?

最佳答案

即使类路径上没有类 a.b.c.Foo,使用 type = { "a.b.c.Foo"} 也会编译,而 value = { a.b.c.Foo. class } 要求 Foo 至少在编译时位于您的类路径中。由于注释的性质,即使运行时的类路径中不存在 a.b.c.Foo,这两个变体也可以执行 - 至少在某些情况下:

@ConditionalOnClass.value的JavaDoc

Since this annotation is parsed by loading class bytecode, it is safe to specify classes here that may ultimately not be on the classpath, only if this annotation is directly on the affected component and not if this annotation is used as a composed, meta-annotation. In order to use this annotation as a meta-annotation, only use the {@link #name} attribute.

一般来说,@ConditionalOnClass 注释可用于执行依赖于其他存在类的配置。

例如,您可以拥有不同的云存储配置 AWS、GCP 和 Azure。每个配置都会注册一个 CloudUpload bean。使用@ConditionalOnClass,您仅执行当前有效的配置,即,如果AWS SDK位于类路径上,则配置S3CloudUpload bean,...

这只是通过调整您的部署/类路径,您可以以不同的方式配置您的软件。

关于java - 带 @Conditional 的完全限定类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60996670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com