nombre de clase completo con @Conditional

Youssef:

En un video de golf a unos arranque primavera y de configuración automática

introducir descripción de la imagen aquí

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?

DPR:

Usando type = { "a.b.c.Foo" }compilará incluso si no hay una clase a.b.c.Fooen su ruta de clase, mientras que value = { a.b.c.Foo.class }se requiere Foopara 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.Foono 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 @ConditionalOnClassanotació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 CloudUploadfrijol. Y con @ConditionalOnClassejecutar 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 S3CloudUploadfrijol, ...

Eso es simplemente adaptando la implementación / ruta de clases de configurar el software de una manera diferente.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=400977&siteId=1
Recomendado
Clasificación