A essência do princípio da configuração automática SpringBoot
- A inicialização do SpringBoot irá carregar um grande número de classes de configuração automática
- Vamos ver se as funções de que precisamos têm classes de configuração automática escritas pelo SpringBoot por padrão
- 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)
- 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)