Fábricas de primavera | spring.factories | SPI

Spring Factories Spring

Este artículo se reproduce de: https://blog.csdn.net/lvoyee/article/details/82017057

Hay un mecanismo de extensión muy desacoplado en Spring Boot: Spring Factories. Este mecanismo de extensión en realidad está modelado a partir del mecanismo de extensión SPI en Java.



¿Qué es el mecanismo SPI?

El nombre completo de SPI es Service Provider Interface. Es posible que la mayoría de los desarrolladores no estén familiarizados, porque esto es para fabricantes o complementos. Hay una introducción más detallada en la documentación de java.util.ServiceLoader.
Un breve resumen de las ideas del mecanismo java SPI. Los diversos módulos resumidos en nuestro sistema a menudo tienen muchas implementaciones diferentes, como el módulo de registro, el módulo de análisis xml y el módulo jdbc. En el diseño orientado a objetos, generalmente recomendamos la programación basada en interfaces entre módulos, sin implementar clases de implementación codificadas de forma rígida entre módulos. Una vez que la clase de implementación específica está involucrada en el código, viola el principio de conexión. Si necesita reemplazar una implementación, debe modificar el código. Para darse cuenta de que no se puede indicar dinámicamente en el programa cuando se ensambla el módulo, esto requiere un mecanismo de descubrimiento de servicios.
java SPI proporciona un mecanismo de este tipo: un mecanismo para encontrar la implementación del servicio para una interfaz. Algo similar a la idea de IOC, es mover el control de ensamblaje fuera del programa, este mecanismo es particularmente importante en el diseño modular.



Mecanismo SPI en Spring Boot

También hay un mecanismo de carga similar a Java SPI en Spring. Configura el nombre de la clase de implementación de la interfaz en el archivo META-INF / spring.factories y luego lee y crea una instancia de estos archivos de configuración en el programa.
Este mecanismo SPI personalizado es la base de la implementación de Spring Boot Starter.



fábricas de primavera

Principio de implementación de Spring Factories

La clase SpringFactoriesLoader se define en el paquete spring-core. Esta clase implementa la función de recuperar el archivo META-INF / spring.factories y obtener la configuración de la interfaz especificada. En esta clase se definen dos métodos externos:



loadFactories obtiene una instancia de su clase de implementación de acuerdo con la clase de interfaz, este método devuelve una lista de objetos.
loadFactoryNames obtiene el nombre de su clase de interfaz de acuerdo con la interfaz. Este método devuelve una lista de nombres de clases.
La clave de los dos métodos anteriores es obtener el archivo spring.factories del ClassLoader especificado y analizarlo para obtener una lista de nombres de clases. El código específico es el siguiente

|_+_|

A partir del código, podemos saber que en este método, se atravesará el archivo spring.factories debajo de todos los paquetes jar en todo el ClassLoader. Es decir, podemos configurar el archivo spring.factories en nuestro propio jar, lo que no afectará la configuración de otros lugares, ni será sobrescrito por la configuración de otros.

Los spring.factories se obtienen mediante análisis de propiedades, por lo que el contenido del archivo de escritura se instala y configura de la siguiente manera:

|_+_|

Si desea configurar varias clases de implementación para una interfaz, puede usar ',' para dividirla.

archivo spring.factories en el paquete spring-boot

El archivo spring.factories se puede encontrar en muchos paquetes de Spring Boot. El siguiente es el archivo spring.factories en el paquete spring-boot

|_+_|

En el trabajo diario, es posible que necesitemos implementar algún SDK o Spring Boot Starter para que otros lo utilicen,
Podemos utilizar el mecanismo de Fábricas. El mecanismo de Factories permite que el SDK o Starter se utilice con poca o ninguna configuración, simplemente introduciendo nuestro paquete jar en el servicio.


enlace: https://www.jianshu.com/p/00e49c607fa1
Fuente: Libro breve
Los derechos de autor pertenecen al autor. Para reproducción comercial, comuníquese con el autor para obtener autorización, y para reproducción no comercial, indique la fuente.