在有关Spring Boot和自动配置的课程视频中
它说,如果我们不想在编译时依赖类对象,可以使用完全限定的类名type = { "a.b.c.Foo" }
代替value = { Foo.class }
。
你能解释一下这是什么意思吗?
答案 0 :(得分:2)
即使您的类路径上没有类type = { "a.b.c.Foo" }
,也将使用a.b.c.Foo
进行编译,而value = { a.b.c.Foo.class }
要求Foo
至少在编译时位于您的类路径中。由于注释的性质,即使a.b.c.Foo
在运行时类路径上不存在,也可以执行两种变体-至少在某些情况下:
@ConditionalOnClass.value
的JavaDoc
由于此注释是通过加载类字节码来解析的,因此可以安全地在此处指定最终可能不在类路径中的类,除非该注释直接位于受影响的组件上,否则不批注用作组合的元批注。为了将此注释用作元注释,请仅使用{@link #name}属性。
通常,@ConditionalOnClass
批注可用于执行依赖于要显示的其他类的配置。
例如,您可能具有不同的云存储配置AWS,GCP和Azure。这些配置中的每一个都注册一个CloudUpload
bean。使用@ConditionalOnClass
仅执行当前有效的配置,即,如果AWS开发工具包位于类路径中,则配置S3CloudUpload
bean,...
只需调整您的部署/类路径,即可以其他方式配置软件。