A essência do princípio da configuração automática SpringBoot

A essência do princípio da configuração automática SpringBoot

  1. A inicialização do SpringBoot irá carregar um grande número de classes de configuração automática
  2. Vamos ver se as funções de que precisamos têm classes de configuração automática escritas pelo SpringBoot por padrão
  3. Vejamos quais componentes são configurados nesta classe de configuração automática (contanto que os componentes que queremos usar estejam disponíveis, não precisamos configurá-lo novamente)
  4. Ao adicionar componentes à classe de configuração automática no contêiner, certas propriedades serão obtidas da classe de propriedades, e podemos especificar os valores dessas propriedades no arquivo de configuração

xxxAutoConfigurartion: classe de configuração automática;
adicionar componentes ao contêiner
xxxProperties: encapsular propriedades relacionadas no arquivo de configuração;

@Anotação derivada condicional

1. A função das anotações derivadas As
condições especificadas por @Conditional devem ser estabelecidas antes que os componentes possam ser adicionados ao contêiner, e todo o conteúdo da configuração terá efeito.

@Anotação estendida condicional Função (determinar se as condições atuais especificadas são atendidas)
@ConditionalOnJava A versão java do sistema atende aos requisitos?
@ConditionalOnBean O Bean especificado existe no contêiner;
@ConditionalOnMissingBean O Bean especificado não existe no contêiner;
@ConditionalOnExpression Satisfazer a especificação da expressão SpEL
@ConditionalOnClass Existem classes especificadas no sistema
@ConditionalOnMissingClass Não há nenhuma classe especificada no sistema
@ConditionalOnSingleCandidate Existe apenas um bean especificado no contêiner, ou este bean é o preferido
@ConditionalOnProperty Se o atributo especificado no sistema tem o valor especificado
@ConditionalOnResource Se o arquivo de recurso especificado existe no caminho da classe
@ConditionalOnWebApplication Atualmente ambiente web
@ConditionalOnNotWebApplication Atualmente não é um ambiente da web
@ConditionalOnJndi JNDI especificou itens

A classe de configuração automática deve ser válida sob certas condições. Os comentários acima são para julgamento condicional.
Então, como sabemos quais classes de configuração automática são usadas e quais não estão ativadas?

  • Habilite o atributo debug = true no arquivo de configuração para permitir que o console imprima um relatório de configuração automática
Positive matches: //启用的自动配置类(仅部分)
-----------------

   AopAutoConfiguration matched:
      - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)

   AopAutoConfiguration.ClassProxyingConfiguration matched:
      - @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)
      - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)

   DataSourceAutoConfiguration matched:
      - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition)
      - @ConditionalOnMissingBean (types: io.r2dbc.spi.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)

   DataSourceAutoConfiguration.PooledDataSourceConfiguration matched:
      - AnyNestedCondition 2 matched 0 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) matched (DataSourceAutoConfiguration.PooledDataSourceCondition)
      - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition)
Negative matches://没启用,没有匹配成功的自动配置类
-----------------

   ActiveMQAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)

   AopAutoConfiguration.AspectJAutoProxyingConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'org.aspectj.weaver.Advice' (OnClassCondition)

   ArtemisAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)

   BatchAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition)

   CacheAutoConfiguration:
      Did not match:
         - @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans of type org.springframework.cache.interceptor.CacheAspectSupport (OnBeanCondition)
      Matched:
         - @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition)

Acho que você gosta

Origin blog.csdn.net/weixin_43941676/article/details/108607737
Recomendado
Clasificación