## ** Interpretación personal de SpringBoot **

Interpretación personal de SpringBoot

Después de leer el código fuente de SpringBoot por un tiempo, registraré mi comprensión de SpringBoot hoy.

1. En primer lugar, cuando se trata de SpringBoot, la mayoría de la gente sabe que la convención es más grande que la configuración, entonces, ¿qué es la convención más grande que la configuración?

Así es como explica la Enciclopedia Baidu:

Convención sobre configuración (convención sobre configuración), también conocida como programación por convención, es un paradigma de diseño de software que tiene como objetivo reducir
el número de decisiones que los desarrolladores de software deben tomar y obtener beneficios simples sin perder flexibilidad.

Por supuesto, para aprender el conocimiento, debe convertirlo en su propio entendimiento, por lo que el siguiente es mi entendimiento personal:

En el entorno ecológico de Spring, es un proceso paso a paso de complejo a simple, desde el SSM cuando entró en contacto por primera vez con el marco, hasta el SpringBoot actual e incluso la
solución integral del marco de cubo de la familia SpringCloud, etc., todos siguen esta ley .
Entonces nuestro SpringBoot se cultiva en este entorno
por venir, será nuestro desarrollo comercial y el desarrollo de ensamblajes separados en la mayor medida posible, dejemos que nuestros programadores dedicados se puedan enfocar en el desarrollo comercial y no
necesariamente pasar mucho tiempo En el archivo de configuración para construir el entorno de desarrollo.

Por ejemplo, un gran proyecto distribuido, que puede ser proporcionado por 20 a 50 submodelos diferentes, si todavía seguimos el modelo anterior de
pelo abierto , manejamos el archivo de configuración relevante para que tantos modelos, el arquitecto beba suficiente Es una olla, no un mes y medio que no se puede quitar. Obviamente esto
no es lo que queremos, por lo que el acuerdo de SpringBoot es mayor que la configuración, lo que nos resuelve esta dificultad.
Tomemos la herramienta de desarrollo de IDEA SpringBoot2.2.6.RELEASE como ejemplo, para hablar sobre los beneficios de nuestro acuerdo más grandes que la configuración: .Tome el
desarrollo web como ejemplo, después de hacer clic en unos sencillos pasos (omitidos aquí), IDEA dará Hemos creado un proyecto con entorno web
.
Entonces, ¿qué necesitamos ejecutar en este proyecto y luego ver la entrada del navegador correspondiente? Es muy simple, solo necesitamos escribir un
controlador simple y usar @RestController y @RequestMapping el formulario de anotación del método de solicitud correspondiente para devolver los
datos Json a nuestro navegador . Obviamente, encontraremos que después de usar SpringBoot, ya no necesitamos escribir
applicationContext.xml, springmvc.xml, mybatis-config.xml, web.xml ... y así sucesivamente cuando creamos un proyecto nuevamente . El
archivo de configuración es un dolor de cabeza para los programadores , pero podemos escribir directamente nuestra capa de controlador y ver el efecto de inmediato en nuestro navegador. Esto parece ser
una ilusión cómoda que hace que nuestros desarrolladores de back-end se conviertan inmediatamente en desarrolladores de front-end. Puede ver el efecto de inmediato simplemente escribiendo. Digamos adiós al
niño con signo de interrogación que solía ser un "Bug-15 en una operación de comida". ¿No es genial?
Entonces algunas personas se preguntarán, ¿dónde está nuestra primavera nativa?
2. A continuación, nuestro acuerdo es mayor que la configuración y saldremos. En el marco SpringBoot, nuestra palabra clave es ensamblaje automático
@EnableAutoConfiguration. En nuestro proyecto SpingBoot, la entrada clave del programa es la
clase de ingeniería anotada por @SpringBootApplication. De acuerdo con la dependencia de nuestro archivo POM, ensamblamos automáticamente los componentes correspondientes y las configuraciones correspondientes en los componentes.Todas las configuraciones son
asumidas completamente por nuestro SpringBoot, lo que nos ayudará a completar la construcción del entorno correspondiente y el proceso de integración ... etc. En otras palabras, cuando se crea el proyecto, nuestra
configuración predeterminada ha entrado en vigencia, y podemos realizar un desarrollo simple sobre esta configuración.
3. Por lo tanto, la convención que entiendo es mayor que la configuración es usar la configuración predeterminada en un entorno donde no hay una configuración especificada y esforzarse por minimizar la configuración como idea central. Cuando
hay necesidades especiales, puede personalizar la configuración. Esto puede reducir considerablemente el trabajo de configuración Esta es la llamada "convención"
¿Cuáles son las convenciones en SpringBoot?
1. Estructura de directorios de Maven. Existe una carpeta de recursos de forma predeterminada para almacenar archivos de configuración de recursos. src-main-resources, src-main-java. Las
clases compiladas predeterminadas están todas en la carpeta de destino 2. El
archivo de configuración predeterminado de Spring Boot debe ser, o solo puede ser, un archivo yml o un archivo de propiedades llamado application., Y las únicas
propiedades predeterminadas en 3.application.yml. La información de conexión de la base de datos debe tener el prefijo spring: datasource :; configuración de múltiples entornos. Este atributo puede
leer automáticamente diferentes archivos de configuración según el entorno operativo; número de puerto, ruta de solicitud, etc.
2. Hablemos de por qué la clase de ingeniería después de la anotación @SpringBootApplication se ensambla automáticamente.
1. Ingrese la clase de entrada del proyecto, Ctrl + clic @SpringBootApplication y veremos la siguiente información:Inserte la descripción de la imagen aquí

En este montón de anotaciones, podemos ver las palabras familiares @EnableAutoConfiguration, entonces, ¿cuál es el papel de esta anotación?
(1) Ayude a las aplicaciones SpringBoot a cargar todas las configuraciones de @Configuration elegibles en el contenedor IoC actual creado y utilizado por SpringBoot
(inversión de control)
(2) Introduzca AutoConfigurationImportSelector, cuya lógica central es el método selectImports: desde el archivo de configuración METAINF / spring .factories cargan todas las clases que se pueden usar para configurar automáticamente; la deduplicación y excluir excluidos y excludeName llevan los atributos de clase; a través de la
filtración, se determina de acuerdo con el archivo POM starter starter cumple la condición, luego la condición (@ ) retorno de la clase de autoconfiguración
;
(3) permitiendo la configuración automática de la anotación Spring Boot, luego la anotación abierta, Spring Boot se puede configurar en función de la clase o clases de paquete en la ruta actual
Spring Bean.
¿Divagar en estas explicaciones más oficiales podría hacer que los niños planteen muchos signos de interrogación?
Luego utilizo Spring para imitar y resumir:
Spring:
En Spring, nuestro núcleo es el contenedor IOC. Normalmente, el contenedor Spring se carga después de que se inicia web.xml en el proyecto SSM, y Spring estará en
nuestro applicationContext.xml Escanee todos los ID y configure las Clases correspondientes en el contenedor, de modo que podamos
llamar a las clases e instancias de componentes correspondientes en el contenedor a través de la inyección de dependencias para completar las funciones correspondientes.
SpingBoot:
De hecho, las dos ideas son muy similares. SpringBoot almacena toda la información de configuración posible (que puede entenderse como el ID en Spring) en METAINF / spring.factories. Cuando el autoensamblaje está habilitado, SpringBoot escaneará la ruta Todos los xxxAutoConfiguration,
luego pasan por nuestro filtro AutoConfigurationImportSelector para desduplicar y excluir, y luego a través del Starter en el archivo POM
para finalmente filtrar todas las configuraciones que necesitamos, y luego cargar todo lo que necesitamos a través de la clase XXXPropertise.class Configure los componentes, y finalmente complete
todas nuestras configuraciones.
Además, SpringBoot permite a los programadores agregar o modificar la configuración predeterminada.
Modificar: Simplemente modifique la información de configuración predeterminada directamente a través de nuestro archivo .yml o .properties.
Agregar: Si el programador agrega un componente personalizado, debe heredar el correspondiente Interfaz del componente, y luego de escribir el contenido del
componente, agregue el componente al contenedor con la combinación de @ Configuration + @ Bean (nota: !!! No agregue @EnableXXX, de lo contrario el
componente personalizado no será válido);
Por qué usar la anotación @EnableXXX ¿Después de que el componente personalizado no surta efecto?
Porque como se mencionó anteriormente, @EnableXXX escaneará todos los componentes correspondientes en el contenedor SpringBoot, y luego realizará una serie de filtrado en estos componentes.
Entre ellos, habrá una anotación @ConditionalOnMissingClass para determinar si hay una clase anotada por @EnableXXX en el contenedor. Si existe
, el código debajo del comentario de la condición de juicio no tendrá efecto Obviamente, heredamos la interfaz correspondiente de SpringBoot y, por supuesto, otros también tienen sus propios hijos.
Clase, si agrega anotaciones @EnableXXX, habrá duplicación. Por lo tanto, el código interno de SpringBoot del que depende nuestro código personalizado dejará de ser
válido, lo que hará que nuestros componentes personalizados dejen de ser válidos. Por lo tanto, el sitio web oficial les dirá a los usuarios que nunca agreguen componentes personalizados cuando agreguen componentes personalizados.
¡querer! Agregue el @EnableXXX correspondiente! ! !
Una vez que se completa la adición, cuando se necesita llamar al componente personalizado, SpringBoot buscará todos los componentes correspondientes en el contenedor, y luego
juzgará las condiciones una por una a través de @ConditionalOnXXX, y finalmente filtrará un componente óptimo y lo proporcionará al bloque de código correspondiente. Use
aquí ¿Alguien lo encuentra familiar? ¡Correcto! De hecho, SpringBoot utiliza muchas ideas de diseño que escanean las mejores selecciones, y se
sentirá profundamente si observa más el código fuente .
Además, en el diseño de SpringBoot hay una idea compatible y complementaria de diferentes entornos y diferentes prioridades (no detallada, si te interesa entenderlo tú mismo), también
vale la pena aprender.
3. En esta parte, hablemos de los archivos de configuración .yml y .properties mencionados anteriormente.
1. El archivo de configuración global proporcionado en SpringBoot debe ser, o solo puede ser llamado application., Con los sufijos .yml y .properties Archivo de configuración
.
Entonces, ¿qué podemos configurar en este archivo de configuración?
(1) Al observar el paquete jar, encontramos que el paquete org.springframework.boot.autoconfigure almacena todas las
clases de configuración que podemos usar .
(2) SpringBoot asignará algunos valores a todos los atributos definidos en estas clases de configuración de forma predeterminada, por lo que los valores de configuración predeterminados de estas clases de configuración son solo
Solo puede satisfacer las necesidades de un entorno de desarrollo relativamente simple. Si queremos desarrollar en un entorno complejo, podemos
modificar los valores predeterminados de las propiedades correspondientes en los dos archivos de configuración global anteriores. Puede
consultar org.springframework.boot.autoconfigure. La persona en el paquete dirá que con tantas clases de configuración, ¿qué clases de configuración
han tenido efecto en nuestro entorno y podemos modificarlas para que surtan efecto en consecuencia?
(3) Podemos establecer debug = true en el archivo de configuración global, y luego podemos ver un montón de datos en la ventana Ejecutar, en la que habrá un
informe INFORME DE EVALUACIÓN DE CONDICIONES, que se divide en efectivo (coincidencias positivas :) y no en efecto (Negativo
las coincidencias :) clase de configuración
(4) para que podamos ver la clase de configuración ha estado vigente allí que necesitamos, si podemos modificar el archivo de configuración por defecto en el
valor de reconocimiento global , si no puede ir Importe las dependencias correspondientes en el archivo POM para que entren en vigor las clases de configuración correspondientes, y luego realice las operaciones anteriores; o puede escribir una
clase de configuración usted mismo .
Bueno, lo anterior es mi comprensión personal de SpringBoot. Puede que no escriba bien y espero que los grandes me ayuden a señalarlo. Muchas gracias por permitirnos progresar
y crecer juntos.
¡La vida es interminable y el aprendizaje es interminable! Ven y compártelo cuando tengas una comprensión más profunda en el futuro, ¡gracias!

Supongo que te gusta

Origin blog.csdn.net/weixin_43562937/article/details/105921257
Recomendado
Clasificación