En un video de golf a unos arranque primavera y de configuración automática
Es decir que podríamos utilizar un nombre de clase completo type = { "a.b.c.Foo" }
en lugar de value = { Foo.class }
si no queremos depender de la clase de objeto en tiempo de compilación.
¿Me lo que significa ese puede explicar?
Usando type = { "a.b.c.Foo" }
compilará incluso si no hay una clase a.b.c.Foo
en su ruta de clase, mientras que value = { a.b.c.Foo.class }
se requiere Foo
para estar en la ruta de clases, al menos en tiempo de compilación. Debido a la naturaleza de las anotaciones ambas variantes se pueden ejecutar incluso si a.b.c.Foo
no está presente en la ruta de clase en tiempo de ejecución - al menos en algunas circunstancias:
JavaDoc de @ConditionalOnClass.value
Desde esta anotación se analiza por código de bytes de carga de clases, es seguro para especificar las clases aquí que en última instancia no puede estar en la ruta de clases, sólo si esta anotación se encuentra directamente en el componente afectado y no si esta anotación se utiliza como un compuesto, meta-anotación . Para utilizar esta anotación como un meta-anotación, utilice únicamente el #nombre {@ link} atributo.
En general, la @ConditionalOnClass
anotación puede ser utilizado para ejecutar configuraciones que dependen de otras clases de estar presente.
Por ejemplo, podría tener diferentes configuraciones de almacenamiento de la nube de AWS, GCP y Azure. Cada una de estas configuraciones registra un CloudUpload
frijol. Y con @ConditionalOnClass
ejecutar solamente la configuración que es válida actualmente, es decir, si el SDK de AWS está en la ruta de clases, se configura el S3CloudUpload
frijol, ...
Eso es simplemente adaptando la implementación / ruta de clases de configurar el software de una manera diferente.