El principio de SpringBoot y el uso de archivos de configuración

1. Comprensión preliminar del principio de carga automática de springboot:

  Cuando creamos un proyecto springboot e introducimos un iniciador web, podemos usar las funciones de springmvc, pero no hemos configurado el archivo springmvc.xml / web.xml, ¿cómo comienza?

2. ¿Cómo gestiona SpringBoot las dependencias?

Abra pom.xml, podemos ver un proyecto principal:
Inserte la descripción de la imagen aquí
hacemos clic en este proyecto principal y encontramos que hay un proyecto principal dentro:
Inserte la descripción de la imagen aquí
ingresamos esto y encontramos que son todas las coordenadas dependientes y números de versión, etc .:
Inserte la descripción de la imagen aquí
  este es el centro de control de versiones de springboot (mecanismo de arbitraje de versiones de springboot), que contiene las dependencias que nuestro entorno normal necesita. Podemos importar dependencias en el futuro sin escribir versiones, pero si las dependencias que usamos no están en este, necesitamos dependencias de importación normales .
  Cuando la versión de dependencia importada por springboot no satisface nuestras necesidades, podemos cambiar su versión predeterminada:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí


Starter:
Inserte la descripción de la imagen aquí
spring-boot-starter-web: ayúdanos a importar los componentes de los que depende el módulo web para su funcionamiento normal;
spring-boot-starter-test: ayúdanos a importar los componentes de los que depende el módulo de prueba para su funcionamiento normal.
El significado general del starter:
  Springboot nos ayuda a extraer todos los entornos requeridos por la escena, y encapsularlos en un starter. Cuando necesitemos usar cualquier escena, solo necesitamos importar el starter correspondiente. Importará todas las dependencias que necesitemos automáticamente. Por ejemplo: necesitamos usar redis, solo necesitamos importar el spring-boot-starter-redis este iniciador.



Montaje automático

  Cuando creamos un proyecto nuevo, automáticamente generará una clase para nosotros. Hay un método principal en él, y podemos iniciar el proyecto:
Inserte la descripción de la imagen aquí
podemos ver que hay una anotación en la clase:
  @SpringBootApplication: Esta anotación significa La clase marcada con esta anotación es nuestra clase de inicio Springboot ejecutará el método principal de esta clase de inicio para iniciar nuestro programa.


Hagamos clic y veamos:
Inserte la descripción de la imagen aquí
hay tres nuevas anotaciones proporcionadas por springboot:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {
    
    @Filter(
    type = FilterType.CUSTOM,
    classes = {
    
    TypeExcludeFilter.class}
),
@Filter(
    type = FilterType.CUSTOM,
    classes = {
    
    AutoConfigurationExcludeFilter.class}
)}
)

@ComponentScan Anotación:
  Función: escanea y carga automáticamente componentes o beans calificados, carga esta definición de bean en el contenedor IOC, y aquí es para excluir esas clases y evitar que se carguen en el contenedor ioc, y la ruta de escaneo del paquete no está especificada
@ SpringBootConfiguration:
  Función: la clase de configuración de SpringBoot, y cargue la clase en el contenedor ioc, y márquela en una clase determinada, lo que indica que esta es una clase de configuración de SpringBoot;


@EnableAutoConfiguration:
  La anotación para habilitar el ensamblaje automático es un núcleo anotación, que indica Dile a springboot que habilite la función de configuración automática.
Hacemos clic en esta anotación:
Inserte la descripción de la imagen aquí
encontramos que hay dos anotaciones más en esta:
@AutoConfigurationPackage : Importa automáticamente el paquete de configuración.También
hay una anotación en esta anotación
Inserte la descripción de la imagen aquí
@Import: anotación de nivel inferior de primavera, que importa el componente
Registrar. class en el contenedor, lo que significa la clase del programa principal. Todas las clases del paquete y los subpaquetes se escanean en el contenedor de primavera.
Ver la depuración del código subyacente:
Inserte la descripción de la imagen aquí
es por eso que necesitamos construir un subpaquete debajo del paquete o paquete del programa principal


Después de leer esto, regresaremos al nivel anterior para ver.

Inserte la descripción de la imagen aquí
Esta anotación es para cargar esta clase en nuestro contenedor de primavera, y podemos encontrar un método en él:
Inserte la descripción de la imagen aquí
este método llama a otro método:
Inserte la descripción de la imagen aquí
este método llama al método LoadSpringFactories, haga clic en este método:
Inserte la descripción de la imagen aquí

Aquí podemos ver un archivo, el directorio donde se encuentra este archivo: bajo el
paquete spring-boot-autoconfigure, que es el paquete de configuración automática.
Inserte la descripción de la imagen aquí
Abrimos este archivo:
Inserte la descripción de la imagen aquí

Descubrí que hay muchos nombres de clases totalmente calificados configurados y descubrí que su formato de nomenclatura está en el formato de configuración automática xxx, es decir, xxx es el nombre de entorno que necesitamos.
Encontramos una configuración con la que estamos familiarizados:
Inserte la descripción de la imagen aquí
haga clic en esta clase:
Inserte la descripción de la imagen aquí
esta clase es una clase de configuración con muchas anotaciones, y estas anotaciones se utilizan para determinar cuándo cargar esta clase de configuración.


@ConditionalOnBean:当容器中有指定的Bean的条件下  
@ConditionalOnClass:当类路径下有指定的类的条件下  
@ConditionalOnExpression:基于SpEL表达式作为判断条件  
@ConditionalOnJava:基于JVM版本作为判断条件  
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置  
@ConditionalOnMissingBean:当容器中没有指定Bean的情况下  
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下  
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下  
@ConditionalOnProperty:指定的属性是否有指定的值  
@ConditionalOnResource:类路径下是否有指定的资源  
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean

Si se cumplen las condiciones, esta clase de configuración se cargará en nuestro contenedor de resorte a través de la reflexión, que es el ensamblaje automático.

Comprenda el resumen usted mismo:
  springboot nos ayudará automáticamente a formar todos los archivos que necesitamos configurar en la forma de clases de configuración, y pondrá los nombres completos de las clases de estas clases de configuración en el paquete spring-boot-autoconfigure Meta-info / spring En el archivo .factories, cuando comencemos, cargaremos este archivo y cargaremos las clases de configuración que cumplan con las condiciones en nuestro contenedor de primavera a través de la reflexión, para que nuestro entorno no necesite volver a configurarse.
  Quizás esta condición esté relacionada con el iniciador correspondiente.
  Referencia de: Notas de Mad God Talking

extraer:

SpringBoot obtiene el valor especificado por EnableAutoConfiguration de META-INF / spring.factories en la ruta de clase cuando se inicia.

Importe estos valores al contenedor como la clase de autoconfiguración, y la clase de autoconfiguración entrará en vigor, ayudándonos con el trabajo de autoconfiguración;

Toda la solución general de J2EE y la configuración automática se encuentran en el paquete jar de springboot-autoconfigure;

Importará muchas clases de configuración automática (xxxAutoConfiguration) al contenedor, es decir, importará todos los componentes necesarios para este escenario al contenedor y configurará estos componentes;

Con la clase de configuración automática, podemos evitar el trabajo de escribir manualmente componentes funcionales de inyección de configuración;

Resumen:
• SpringBoot primero carga todas las clases de autoconfiguración xxxxxAutoConfiguration
• Cada clase de autoconfiguración tiene efecto de acuerdo con las condiciones, y por defecto enlazará el valor especificado por el archivo de configuración. Llévelo dentro de xxxxProperties. xxxProperties está vinculada al archivo de configuración
• La clase de configuración efectiva ensamblará muchos componentes en el
contenedor • Mientras estos componentes estén en el contenedor, estas funciones son equivalentes a estas funciones
• Configuración personalizada
• El usuario reemplaza directamente los componentes subyacentes con @ Bean
• El usuario puede modificar el valor del archivo de configuración obtenido por este componente.
xxxxxAutoConfiguration -> Componente -> Valor en xxxxProperties ----> application.properties

Supongo que te gusta

Origin blog.csdn.net/weixin_43431123/article/details/112704128
Recomendado
Clasificación