SpringBoot (tres) de configuración automática SpringBoot

    Todos sabemos SpringBoot nos ayudan a integrar una serie de componentes y configuraciones, así SpringBoot es cómo integrar estas configuraciones y se configura automáticamente al inicio de la misma. Hablando de lo cual es posible que no necesita volver atrás y ver @SpringBootApplication esta anotación, y han dicho antes que este comentario es de configuración @, @ EnableAutoConfiguration, @ combinación ComponentScan de tres notas, es necesario @EnableAutoConfiguration especial énfasis en este comentario, no esto es las notas incorrectas SpringBoot completan la configuración automática. @EnableAutoConfiguration ----- @ Importación (EnableAutoConfigurationImportSelector.class) ----- AutoConfigurationImportSelector este orden nos SpringBoot automáticamente configure puede introducida en el selector. A continuación vamos a ver cómo SpringBoot completa se configura automáticamente y observar en la fuente.

. 1    públicas String [] selectImports (AnnotationMetadata annotationMetadata) {     // seleccione Importar 
2          SI (IsEnabled (annotationMetadata)) { // determina si los datos originales no se vuelven vacías operaciones de importación vacío vacío vacío 
3.            Retorno NO_IMPORTS;
 . 4          }
 . 5          el try {
 6.              autoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader 
 7.                       .loadMetadata ( el este .beanClassLoader);
 . 8              atributos AnnotationAttributes = getAttributes (annotationMetadata);   // carga y adquiere atribuyen 
9             List <String> configuraciones = getCandidateConfigurations (annotationMetadata, // 获取配置信息
10                      atributos);
11              configuraciones = RemoveDuplicates (configuraciones); 
12              configuraciones = sort (configuraciones, autoConfigurationMetadata);
13              Set <String> exclusiones = getExclusions (annotationMetadata, atributos);
14             checkExcludedClasses (configuraciones, exclusiones);
15              configurations.removeAll (exclusiones);
16              configuraciones = filtro (configuraciones, autoConfigurationMetadata);  //No totalmente integrado para la eliminación de la línea 11 y 16 está configurada para ordenar y filtrar 
17.              FireAutoConfigurationImportEvents (configuraciones, exclusiones);        // componentes después de filtro de importación 
18 se              retorno configurations.toArray ( nuevo nuevo String [configurations.size ()]);
 . 19          }
 20 es          la captura (IOException ex) {
 21 es              de banda  nueva nueva IllegalStateException (EX);
 22 es          }
 23 es      }

    El código anterior es el método principal para la configuración automática, de hecho, los procedimientos operativos tengo una explicación sencilla en los comentarios

     1. En primer lugar, si los datos originales se determina que es vacío, entonces la operación específica

     2. La carga de los datos originales y la obtención de la propiedad

     3. Obtener información de configuración    (de hecho, lo más importante es cómo conseguir el tercer punto, porque la información de configuración y la carga es lo que más les preocupa es la parte central de la SpringBoot)

     4. Quitar no integrarse plenamente configuración y filtro de pedido    (porque algunos SpringBoot configuración no ser totalmente configurado para nosotros, nosotros mismos debemos ser configurado manualmente aquí SpringBoot lo creía personalmente que si todos los componentes están integrados de manera que se inició el proyecto en sí causará un poco de presión, después de todo, no necesitan algunos componentes que se han utilizado en algunos proyectos)

     La configuración de componentes de importación después del tratamiento

    Aquí tenemos que hacer hincapié en getCandidateConfigurations este método y ver cómo SpringBoot es la obtención de componentes.

. 1  protegidas Lista <cadena> getCandidateConfigurations (AnnotationMetadata de metadatos,
 2              AnnotationAttributes Atributos) {
 3.          Lista <cadena> Configuraciones = SpringFactoriesLoader.loadFactoryNames (    // la información del resorte fábrica configuración de carga 
4.                  GetSpringFactoriesLoaderFactoryClass (), getBeanClassLoader ());
 . 5          Assert.notEmpty (Configuraciones,
 . 6                  "no hay clases de configuración automática encontró una en el META-INF / spring.factories el Si."
 7.                          + "son el uso de envasado de un encargo, que el seguro de ficheros hacen es correcto.");   // Si la configuración está dispuesto a volver vacíos información o explicación no encontró la información de configuración en el META-INF / spring.factories este directorio
8          de retorno configuraciones;
9 }
1  pública  estática  final de cadena FACTORIES_RESOURCE_LOCATION = "META-INF / spring.factories" ;
2  
3  
4  pública  estática List <String> loadFactoryNames (<?> Clase factoryClass, cargador de clases de cargador de clases) {
 5          cuerdas factoryClassName = factoryClass.getName ();
6          try {
 7              Enumeración <URL> direcciones URL = (= cargador de clases! Nulos classLoader.getResources (FACTORIES_RESOURCE_LOCATION):?   // 获取资源路径
8                      ClassLoader.getSystemResources (FACTORIES_RESOURCE_LOCATION));
9             List <String> resultado = nuevo ArrayList <String> ();
10              mientras (urls.hasMoreElements ()) {                 // 如果存在将资源存入结果集中
11                  URL url = urls.nextElement ();
12                  Características = PropertiesLoaderUtils.loadProperties ( nuevo UrlResource (URL));
13                  Cadena factoryClassNames = properties.getProperty (factoryClassName);
14                  result.addAll (Arrays.asList (StringUtils.commaDelimitedListToStringArray (factoryClassNames)));
15              }
 16              de retorno resultado;
17          }
 18          captura (IOException ex) {
 19              de banda  nueva IllegalArgumentException ( "No se puede cargar [" + factoryClass.getName () +
 20                      "] fábricas de ubicación [" + FACTORIES_RESOURCE_LOCATION + "]" , ex);
21          }
 22      }

 

 

 

 Creo que aquí no necesita demasiada explicación, y en pocas palabras es SpringBoot irá a "META-INF / spring.factories" directorio para obtener la información de configuración y, a continuación, realice la configuración automática, y ahora que miro hacia atrás inicialmente método SpringBoot plazo para la configuración automática, echamos un vistazo a depurar.

 

 

 Aquí podemos ver SpringBoot él para conseguir en el directorio antes de la extracción y filtración 96 no pronuncia después de otra mirada después de la filtración.

 

 

 

     Después de la filtración no son 20, es decir SpringBoot 20 componentes en nuestro totalmente integrado y configurado automáticamente, si otros componentes necesitan ser nosotros mismos configurado manualmente. (Número fijo de componentes de versiones compatibles podrían cambiar aquí utilizo la versión 1.5.9 de)

    Además de este modo hay otras maneras de determinar qué componentes SpringBoot configure automáticamente por nosotros? Si realmente se mire este problema, después de todo, no podemos escribir cada vez que cuando empieza a verificar lo que se configura automáticamente a través de depuración, SpringBoot ofrece modo de inicio de depuración en la consola vamos a ver lo que se puede automatizar ¿Qué configuración no completó la auto-configuración, no hablaba mucho en el mapa

 

 

 

 

    coincidencias positivas: Partidos negativos ya configurados automáticamente: ninguna configuración automática, así es como SpringBoot completar la configuración automática, de hecho, quiere configurar automáticamente esto por mucho tiempo o más que escribir, después de toda la configuración del núcleo SpringBoot, también temer en algunos lugares fue malo para engañar a otros les gustaría ver este artículo, ver el lugar equivocado con la esperanza de corregirlo, aprender unos de otros progreso mutuo, no soy una persona que trabaja duro, pero yo quiero ser capaz de cambiar el estado actual lenta, hasta ahora todavía recuerdo soy palabras de un profesor universitario, siempre que los nunca es tarde para empezar, siempre y cuando los esfuerzos tendrán éxito , puede haber componentes de la sopa de pollo, pero aún así nunca es tarde para empezar, siempre y cuando la esperanza.

 

 

    Durante mucho tiempo me convierto dawdle decadente, incluso olvidar la intención original había elegido esta profesión, siempre fue aficionado a quejarse de la injusticia, espero que pueda volver al día siguiente de los esfuerzos de su propia, nadie quiere luz plana la mediocridad durante toda la vida, a no ser digno de los demás, pero para ser digna a sí mismos, pero también quieren cada uno de los cuales insistido socio en este sector podemos ser dignos de su propia, convirtiéndose en la imaginación de los suyos.

Supongo que te gusta

Origin www.cnblogs.com/wjt096/p/12585939.html
Recomendado
Clasificación