SpringBoot (três) de configuração automática SpringBoot

    Nós todos sabemos SpringBoot ajuda-nos a integrar um número de componentes e configurações, de modo SpringBoot é como integrar essas configurações e é configurado automaticamente no início do mesmo. Falando de que você não pode precisar de ir para trás e olhar para @SpringBootApplication essa anotação, e já disse antes este comentário é @ Configuração, @ EnableAutoConfiguration, @ combinação ComponentScan de três notas, é preciso @EnableAutoConfiguration especial ênfase a este comentário, não isto é as notas erradas SpringBoot completar a configuração automática. @EnableAutoConfiguration ----- @ Import (EnableAutoConfigurationImportSelector.class) ----- AutoConfigurationImportSelector esta ordem, podemos SpringBoot automaticamente configure introduzidos no selector. Em seguida, vamos olhar como SpringBoot completa é configurado automaticamente e observar na fonte.

. 1    públicas String [] selectImports (AnnotationMetadata annotationMetadata) {     // escolha Import 
2          IF (IsEnabled (annotationMetadata)!) { // determina se os dados originais não é operações vazias vazias de retorno vazia relacionado importação 
3.            Retorno NO_IMPORTS;
 . 4          }
 . 5          o try {
 6.              autoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader 
 7.                       .loadMetadata ( a este .beanClassLoader);
 . 8              atributos AnnotationAttributes = getAttributes (annotationMetadata);   // carga e adquire atribuem 
9             List <String> configurações = getCandidateConfigurations (annotationMetadata, // 获取配置信息
10                      atributos);
11              configurações = removeDuplicates (configurações); 
12              configurações = ordenação (configurações, autoConfigurationMetadata);
13              Set <String> exclusões = getExclusions (annotationMetadata, atributos);
14             checkExcludedClasses (configurações, exclusões);
15              configurations.removeAll (exclusões);
16              configurações de filtro = (configurações, autoConfigurationMetadata);  //Não totalmente integrado para a remoção a partir da linha 11 e 16 está configurada para classificar e filtro 
17.              FireAutoConfigurationImportEvents (configurações, exclusões);        // componentes após o filtro de importação 
18 é              retorno configurations.toArray ( novo novo String [configurations.size ()]);
 . 19          }
 20 é          o prendedor (IOException EX) {
 21 é              o arremesso  novo novo IllegalStateException (EX);
 22 é          }
 23 é      }

    O código acima é o principal método para a configuração automática, de fato, procedimentos operacionais tenho uma explicação simples sobre os comentários

     1. Em primeiro lugar, se os dados originais é determinado para estar vazio, em seguida, a operação específica

     2. Coloque os dados originais e propriedade obtendo

     3. Obter informações de configuração    (na verdade, a coisa mais importante é a forma de obter o terceiro ponto, porque as informações de configuração e carregá-lo é o que estamos mais preocupados é a parte central do SpringBoot)

     4. Retire não está totalmente configuração e filtro de ordenamento integrado    (porque alguns SpringBoot configuração não ser totalmente configurado para nós, nós mesmos precisamos ser configurado manualmente aqui SpringBoot fez isso pessoalmente acho que se todos os componentes estão integrados de forma que começou no próprio projeto irá causar alguma pressão, afinal, alguns componentes não precisam ser usados em alguns projectos)

     A configuração do componente de importação após tratamento

    Aqui precisamos enfatizar a getCandidateConfigurations este método e ver como SpringBoot é a obtenção de componentes.

. 1  protegidas List <string> getCandidateConfigurations (AnnotationMetadata metadados,
 2              AnnotationAttributes Atributos) {
 3.          Lista <String> Configurações = SpringFactoriesLoader.loadFactoryNames (    // a informação da mola fábrica configuração de carregamento 
4.                  GetSpringFactoriesLoaderFactoryClass (), getBeanClassLoader ());
 . 5          Assert.notEmpty (configurações,
 . 6                  "sem aulas configuração automática encontrada no META-INF / spring.factories o Se você."
 7.                          + "são a utilização de embalagens Um costume, que a Certifique-se de arquivo está correto.");   // Se a configuração é organizado para retornar vazia informação ou explicação não encontrou as informações de configuração no META-INF / spring.factories este diretório
8          retorno configurações;
9 }
1  pública  estática  final de Cordas FACTORIES_RESOURCE_LOCATION = "META-INF / spring.factories" ;
2  
3  
4  pública  estática List <String> loadFactoryNames (<?> Class factoryClass, ClassLoader Classloader) {
 5          Cordas factoryClassName = factoryClass.getName ();
6          try {
 7              enumeração <URL> urls = (Classloader =! Nulos classLoader.getResources (FACTORIES_RESOURCE_LOCATION):   // 获取资源路径
8                      ClassLoader.getSystemResources (FACTORIES_RESOURCE_LOCATION));
9             List <String> resultado = new ArrayList <String> ();
10              enquanto (urls.hasMoreElements ()) {                 // 如果存在将资源存入结果集中
11                  URL url = urls.nextElement ();
12                  properties = PropertiesLoaderUtils.loadProperties ( novo UrlResource (URL));
13                  Cadeia factoryClassNames = properties.getProperty (factoryClassName);
14                  result.addAll (Arrays.asList (StringUtils.commaDelimitedListToStringArray (factoryClassNames)));
15              }
 16              retorno resultado;
17          }
 18          prendedor (IOException ex) {
 19              lance  novo IllegalArgumentException ( "incapaz de carregar [" + factoryClass.getName () +
 20                      "] fábricas de localização [" + FACTORIES_RESOURCE_LOCATION + "]" , ex);
21          }
 22      }

 

 

 

 Eu acredito que aqui não precisa de muita explicação, e em poucas palavras é SpringBoot irá aos "META-INF / spring.factories" diretório para obter as informações de configuração, e em seguida, fazer auto-configuração, e agora olhamos para trás inicialmente termo método SpringBoot para a configuração automática, vamos dar uma olhada depuração.

 

 

 Aqui podemos ver SpringBoot ele entrar no diretório antes da remoção e sem filtração 96 montagem seguinte um outro olhar após filtração.

 

 

 

     Após filtração existem 20, isto é SpringBoot 20 componentes para a nossa totalmente integrados e configurados automaticamente, se outros componentes precisam ser configurados nos manualmente. (Número fixo de componentes versões suportadas pode mudar aqui eu uso a versão 1.5.9 de)

    Além deste modo há outras maneiras de determinar quais componentes SpringBoot configurá-lo automaticamente para nós? Se você realmente olhar para ele este problema, afinal de contas, não podemos escrever a cada momento em que ele começa a verificar o que é automaticamente configurado através de depuração, SpringBoot fornece modo de inicialização de depuração no console vamos ver o que pode ser automatizado Qual a configuração não completar a auto-configuração, não falava muito no mapa

 

 

 

 

    partidas positivos: partidas negativos já configurados automaticamente: nenhuma configuração automática, que é como SpringBoot completar a configuração automática, na verdade, deseja configurar isso automaticamente por um longo tempo, ou então a escrever, depois de toda a configuração do núcleo SpringBoot, também temem em alguns lugares foi errado para enganar outros gostariam de ver neste artigo, consulte o lugar errado na esperança de corrigi-lo, aprender uns dos outros progresso mútuo, eu não sou uma pessoa de trabalho duro, mas eu quero ser capaz de mudar o estado lento atual, até agora ainda me lembro Eu sou palavras de um professor universitário, desde que as nunca é tarde demais para começar, desde que esforços sejam bem sucedidos , pode haver componentes da sopa de galinha, mas ainda nunca é tarde demais para começar, enquanto esperança.

 

 

    Por um longo tempo eu me tornar dawdle decadente, até esquecer da intenção original tinha escolhido esta profissão, foi sempre gostava de se queixar sobre a injustiça, eu espero que eu possa voltar um dia após os esforços de seu próprio, ninguém quer luz plana mediocridade ao longo da vida, a não ser digno de outros, mas para ser digno em si, mas também querem cada um dos quais insistiu parceiro nesta indústria que pode ser digno de sua própria, tornando-se a imaginação de seus próprios.

Acho que você gosta

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