Principe de configuration automatique
À propos de l'auteur
Page d'accueil du blog:Page d'accueil de l'auteur
Introduction:JAVADomaine créateur de haute qualité、Un étudiant de troisième année、Participer à diverses compétitions provinciales pendant l'école、National race,Une série d'honneurs.
Concentre - toi sur moi.:Suivez mon matériel d'apprentissage、Tous les téléchargements de documents sont disponibles,Mise à jour quotidienne des articles,Inspirez - vous en tant queJAVASenior Program singe.
Qu'est - ce qu'un profil écrit exactement?Comment écrire??----Contact---- spring.factories
SpringBootIl y a beaucoup de configurations dans les documents officiels,Nous ne pouvons pas tous nous souvenir,Site officiel:Common Application properties (spring.io)
Analyse du principe de configuration automatique
-
SpringBootCharger la classe de configuration principale au démarrage,La fonction de configuration automatique est activée @EnableAutoConfiguration
-
@EnableAutoConfiguration Action
-
UtilisationEnableAutoConfigurationImportSelectorImporter des composants dans le conteneur
- Vous pouvez voirselectImports()Contenu de la méthode, Il est revenu avec un String[]Un tableau de chaînes,De
this.getAutoConfigurationEntry(annotationMetadata);
Cette méthode nous permet de suivre :
-
C'estgetAutoConfigurationEntry La méthode a une valeur :
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
Appelé obtenir une configuration candidate , Nous cliquons pour continuer à suivre -
SpringFactoriesLoader.loadFactoryNames()
-
Scanner toutjarSous le chemin de classe du paquet
META-INF/spring.factories
-
Emballez le contenu de ces fichiers numérisés danspropertiesObjet
-
DepropertiesDansEnableAutoConfiguration.classCatégorie(Nom de la classe)La valeur correspondante,Et les ajouter au récipient
-
Sous classpath ,
META-INF/spring.factories
Tout ce qui est configuré à l'intérieurEnableAutoConfigurationValeur ajoutée au conteneur:# Initializers org.springframework.context.ApplicationContextInitializer=\ org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\ org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener # Application Listeners org.springframework.context.ApplicationListener=\ org.springframework.boot.autoconfigure.BackgroundPreinitializer # Auto Configuration Import Listeners org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\ org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener # Auto Configuration Import Filters org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\ org.springframework.boot.autoconfigure.condition.OnBeanCondition,\ org.springframework.boot.autoconfigure.condition.OnClassCondition,\ org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\ org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\ org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\ org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\ org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\ org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jReactiveRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\ org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\ org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\ org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\ org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\ org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\ org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\ org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\ org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\ org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\ org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\ org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\ org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\ org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\ org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\ org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\ org.springframework.boot.autoconfigure.r2dbc.R2dbcTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\ org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\ org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\ org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\ org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\ org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\ org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\ org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\ org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\ org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\ org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\ org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\ org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\ org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\ org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\ org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\ org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\ org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\ org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\ org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\ org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\ org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\ org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration # Failure analyzers org.springframework.boot.diagnostics.FailureAnalyzer=\ org.springframework.boot.autoconfigure.data.redis.RedisUrlSyntaxFailureAnalyzer,\ org.springframework.boot.autoconfigure.diagnostics.analyzer.NoSuchBeanDefinitionFailureAnalyzer,\ org.springframework.boot.autoconfigure.flyway.FlywayMigrationScriptMissingFailureAnalyzer,\ org.springframework.boot.autoconfigure.jdbc.DataSourceBeanCreationFailureAnalyzer,\ org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer,\ org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryBeanCreationFailureAnalyzer,\ org.springframework.boot.autoconfigure.session.NonUniqueSessionRepositoryFailureAnalyzer # Template availability providers org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\ org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.mustache.MustacheTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider,\ org.springframework.boot.autoconfigure.web.servlet.JspTemplateAvailabilityProvider
Chacun d'eux xxxAutoConfiguration Les classes sont toutes dans un conteneur Components,Tous dans le conteneur;Utilisez - les pour la configuration automatique;
- Vous pouvez voirselectImports()Contenu de la méthode, Il est revenu avec un String[]Un tableau de chaînes,De
-
Chaque classe de configuration automatique effectue la fonction de configuration automatique;
-
Nous avons**HttpEncodingAutoConfiguration(HttpConfiguration automatique du codage)**Expliquer le principe de la configuration automatique à titre d'exemple;
//Indique qu'il s'agit d'une classe de configuration, Comme les profils écrits précédemment ,Vous pouvez également ajouter des composants au conteneur; @Configuration //Démarrer la classe spécifiéeConfigurationPropertiesFonction; //Entrez iciHttpPropertiesVoir,Ajoutez les valeurs correspondantes dans le fichier de configuration àHttpPropertiesLier; //Et mettreHttpPropertiesAjouter àiocDans le récipient @EnableConfigurationProperties({ HttpProperties.class}) //SpringNiveau infé[email protected] // Juger selon des conditions différentes ,Si les conditions spécifiées sont remplies, La configuration dans toute la classe de configuration prend effet ; // Il s'agit ici de déterminer si l'application actuelle est webApplication,Si oui,La classe de configuration actuelle est en vigueur @ConditionalOnWebApplication( type = Type.SERVLET ) //Déterminer si le projet actuel a cette classeCharacterEncodingFilter;SpringMVCFiltre pour la résolution de code aléatoire; @ConditionalOnClass({ CharacterEncodingFilter.class}) //Déterminer si une configuration existe dans le fichier de configuration:spring.http.encoding.enabled; //S'il n'existe pas,Le jugement est aussi valable //Même si notre profil n'est pas configurépring.http.encoding.enabled=true,Est également valide par défaut; @ConditionalOnProperty( prefix = "spring.http.encoding", value = { "enabled"}, matchIfMissing = true ) public class HttpEncodingAutoConfiguration { //Il est déjà en contact avecSpringBoot Le profil de private final Encoding properties; //Dans le cas d'un seul constructeur de paramètres,La valeur du paramètre est prise du conteneur public HttpEncodingAutoConfiguration(HttpProperties properties) { this.properties = properties.getEncoding(); } //Ajouter un composant au conteneur,Certaines valeurs de ce composant doivent être obtenues à partir depropertiesAccès moyen @Bean @ConditionalOnMissingBean //Déterminer si le conteneur n'a pas ce composant? public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter(); filter.setEncoding(this.properties.getCharset().name()); filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST)); filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE)); return filter; } //....... }
Un mot pour résumer :À en juger par les différentes conditions actuelles,Déterminer si cette classe de configuration est valide!
-
Mais cette classe de configuration prend effet;Cette classe de configuration ajoutera divers composants au conteneur;
-
Les propriétés de ces composants sont dérivées depropertiesObtenu dans la classe,Chaque propriété de ces classes est liée au profil;
-
Toutes les propriétés qui peuvent être configurées dans le profil sontxxxxPropertiesLa classe contient;
-
Ce que le profil peut configurer peut se référer à cette classe d'attributs correspondant à une fonction
//Obtient les valeurs spécifiées etbeanPour lier les propriétés @ConfigurationProperties(prefix = "spring.http") public class HttpProperties { // ..... }
Essayons le préfixe dans le fichier de configuration , Regarde le Conseil. !
C'est le principe de l'assemblage automatique !
Essence
-
SpringBootLe démarrage charge un grand nombre de classes de configuration automatique
-
Voyons si les fonctions dont nous avons besoinSpringBootDans la classe de configuration automatique écrite par défaut;
-
Voyons encore quels composants sont configurés dans cette classe de configuration automatique;(Tant que les composants que nous utilisons existent,Nous n'avons plus besoin de configurer manuellement)
-
Lorsque vous ajoutez des composants à une classe de configuration automatique dans un conteneur,Ça vient depropertiesLa version est - elle conforme aux exigences?Obtenir certaines propriétés dans la classe.Il suffit de spécifier les valeurs de ces propriétés dans le fichier de configuration;
**xxxxAutoConfigurartion:Classe de configuration automatique;**Ajouter des composants au conteneur
xxxxProperties:Aucune classe de configuration automatique ne correspond au succès;
@Conditional
Après avoir appris le principe de l'assemblage automatique , Concentrons - nous sur un détail ,La classe de configuration automatique doit être valide dans certaines conditions;
@ConditionalNotes dérivées(SpringVersion annotée [email protected])
Action:Ça doit l'ê[email protected] conditions spécifiées sont remplies,Il n'y a qu'une seule désignation dans le conteneur,Pour que la console imprime le rapport de configuration automatique;
@ConditionalAnnotation étendue | Action(Configurer tout ce qui est à l'intérieur pour prendre effet) |
---|---|
@ConditionalOnJava | SystèmejavaLa spécification n'existe pas dans le conteneur |
@ConditionalOnJava | La désignation existe dans le conteneurBean ; |
@ConditionalOnMissingBean | Il n'y a pas de classe spécifiée dans le systèmeBean ; |
@ConditionalOnExpression | SatisfactionSpELL'expression spécifie |
@ConditionalOnClass | Classe spécifiée dans le système |
@ConditionalOnMissingClass | Pour ajouter des composants au conteneur |
@ConditionalOnSingleCandidate | Tant que les composants que nous allons utiliser sontBean ,Ou celui - ciBeanEst le premier choixBean |
@ConditionalOnProperty | Si la propriété spécifiée dans le système a la valeur spécifiée |
@ConditionalOnResource | Existe - t - il un fichier de ressources spécifié sous le chemin de classe |
@ConditionalOnWebApplication | Actuellement, c'estwebEnvironnement |
@ConditionalOnNotWebApplication | Ce n'est paswebEnvironnement |
@ConditionalOnJndi | JNDIL'élément spécifié existe |
Tant de classes de configuration automatique,Existe - t - il un fichier de ressources spécifié sous le chemin de classe;C'est - à - dire, Nous avons chargé tant de classes de configuration ,Mais tout ne marche pas..
Si la classe de configuration automatique est valide
Nous pouvonsapplication.propertiesEn activant debug=true
Propriétés;
Imprimer le rapport de configuration automatique sur la console ,Afin que nous puissions facilement savoir quelles classes de configuration automatique sont en vigueur;
#OuvertspringbootClasse de débogage pour
debug=true
-
Positive matches:(La classe de configuration automatique est activée:Correspondance positive)
-
Negative matches:(Pas de démarrage,Déterminer si les conditions actuellement spécifiées sont remplies:Correspondance négative)
-
Unconditional classes: (Classe inconditionnelle)
-
【Présentation: Voir le journal de sortie 】
版权声明
本文为[Directeur d'usine Java]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/10/20211013211944094d.html