Red de conocimiento informático - Problemas con los teléfonos móviles - Principio de ensamblaje automático de SpringBoot

Principio de ensamblaje automático de SpringBoot

A primera vista, @SpringBootApplication consta de muchas anotaciones. De hecho, se puede resumir como una estructura de "tres cuerpos". Solo hay tres anotaciones importantes:

(. 1) Anotación @Configuration

p>

(2) @ComponentScan

(3) @EnableAutoConfiguration

A partir del código fuente, podemos saber que los aspectos más críticos lo que pasa es @Import (EnableAutoConfigurationImportSelector.class). class), con EnableAutoConfigurationImportSelector, @EnableAutoConfiguration puede ayudar a las aplicaciones SpringBoot a cargar todas las configuraciones @Configuration elegibles en el contenedor IoC actualmente creado y utilizado por SpringBoot. Al mismo tiempo, @EnableAutoConfiguration también puede realizar una configuración automática inteligente con la ayuda de una clase de herramienta original de Spring Framework: SpringFactoriesLoader para realizar una configuración automática inteligente.

Resumen: @EnableAutoConfiguration buscará todos los archivos de configuración META-INF/spring.factories en el classpath y colocará org.springframework.boot.Autoconfigure.EnableAutoConfigurationLoader en su archivo de configuración especificado. Los elementos de configuración correspondientes a Autoconfigure.EnableutoConfiguration se crean instancias mediante reflexión (Java Refletion) en la clase de configuración del contenedor IoC correspondiente marcada con el formulario @Configuration JavaConfig, y luego se agregan en uno y se cargan en el contenedor IoC. Para que estas clases de configuración funcionales surtan efecto, verificarán si hay clases dependientes en el classpath (es decir, debe haber un paquete jar con las funciones correspondientes en pom.xml) e inyectarán la clase de configuración en la clase de valor de atributo predeterminado. , y se hará referencia a la clase funcional y se le asignará un valor predeterminado. El principio de generar clases funcionales es preferir la personalización y utilizar clases ensambladas automáticamente cuando no hay personalización.

1. Obtenga el nombre completo de la clase de configuración relacionada con Redis (hay más de 120 clases de configuración) de spring-boot-autoconfigure.jar/META-INF/spring.factories RedisAutoConfiguration, generalmente un La clase de configuración funcional se centra en las funciones y es responsable de gestionar la creación de múltiples clases funcionales relacionadas. Por ejemplo, RedisAutoConfiguration es responsable de la creación de tres clases funcionales: JedisConnectionFactory, RedisTemplate y StringRedisTemplate

2. Una condición de la clase de configuración RedisAutoConfiguration es que la clase RedisOperations exista en el classpath, por lo que el mecanismo de ensamblaje automático de Springboot buscará el archivo de clase correspondiente en el classpath.

3. Si el paquete jar correspondiente existe en pom.xml, la clase dependiente correspondiente puede coincidir.

4. Si la coincidencia es exitosa, la clase de configuración funcional entrará en vigor. De forma predeterminada, la clase de configuración de propiedad @EnableConfigurationProperties(RedisProperties. class)

4.class)

5. Si el paquete jar correspondiente no existe en pom.xml, la dependencia correspondiente. no se puede coincidir con la clase,

6. Las condiciones internas de configuración de la función Redis generan la JedisConnectionFactory final, RedisTemplate, y proporcionan el formulario de configuración predeterminado @ConditionalOnMissingBean(name = "redisTemplate" )

6. La clase de ensamblaje predeterminada creada final se inyectará en el IOC a través de la anotación @Bean en la clase de configuración funcional

7. Cuando el usuario la use, la configuración predeterminada se sobrescribirá cuando el usuario la personalice en el archivo de configuración @ConditionalOnMissingBean(name = " redisTemplate")

1. Las dependencias entre clases se implementan a través de varias anotaciones. El contenedor llamará al método selectImports EnableAutoConfigurationImportSelector.class cuando se inicie Application.run (este método es en realidad). un método de su clase principal) - - Tenga en cuenta que lo que sucede antes de llamar a este método y dónde se llama necesita más discusión

2. El método selectImports eventualmente llamará al método SpringFactoriesLoader.loadFactoryNames para obtener una información completa. lista de configuraciones de Bean comúnmente utilizadas

3. El método loadFactoryNames leerá FACTORIES_RESOURCE_LOCATION (es decir, spring-boot-autoconfigure.jar en spring.factories) y obtendrá el ClassName completo de todos los beans relacionados con Spring, aproximadamente 120 de ellos

4. El método selectImports continúa llamando al filtro (configuraciones, configuración automática). autoConfigurationMetadata); en este momento, el filtrado se realizará uno por uno de acuerdo con las condiciones en estos BeanConfiguration. Lo más importante es

@ConditionalOnClass. Esta anotación condicional irá al classpath para encontrar si existe. es un paquete jar en la clase dependiente condicional, por lo que debe Hay paquetes jar correspondientes y estas clases de dependencia para generar algunos beans de configuración predeterminados requeridos por el entorno IOC

5. Finalmente, inyecte el BeanConfiguration calificado en el valor de atributo de la clase EnableConfigurationPropertie predeterminada e inyectar en el entorno IOC 6.