Maison  >  Article  >  Java  >  Quels sont les points de connaissance du principe d'assemblage automatique de SpringBoot ?

Quels sont les points de connaissance du principe d'assemblage automatique de SpringBoot ?

王林
王林avant
2023-05-15 08:01:251083parcourir

Principe d'assemblage automatique SpringBoot

Principe d'assemblage automatique

pom.xml

  • spring-boot-dependencies : Les dépendances principales sont dans le projet parent !

  • Lorsque nous écrivons ou écrivons des dépendances de Springboot, nous n'avons pas besoin de spécifier la version, car il existe ces entrepôts de versions

Launcher

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

Launcher : Pour parler franchement, c'est le scénario de démarrage de SpringBoot

Par exemple : spring-boot-starter-web, cela nous aidera à importer automatiquement toutes les dépendances de l'environnement web !

SpringBoot transformera tous les scénarios fonctionnels en démarreurs

Quelles fonctions nous voulons utiliser, il nous suffit de trouver le bon démarreur

Programme principal

@SpringBootApplication // 标注这个类是一个Springboot的应用
public class SpringbootHelloworldApplication {

    public static void main(String[] args) {
        // 将SpringBoot应用启动
        SpringApplication.run(SpringbootHelloworldApplication.class, args);
    }

}

Annotations

Principe :

Charger la classe de configuration principale au démarrage de SpringBoot, et activez la fonction de configuration automatique @EnableAutoConfiguration

@SpringBootApplication  // 加载主配置类
	@EnableAutoConfiguration// 开启了自动配置功能 
		@Import({AutoConfigurationImportSelector.class})
			AutoConfigurationImportSelector // 这个新版本的,旧版本是 EnableAutoConfigurationImportSelector
                	- 利用AutoConfigurationImportSelector给容器中导入一些组件
			- 可以查看selectImports()方法的内容;
			- List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);// 获取候选的配置

                        protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
                            List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
                            Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
                            return configurations;
                        }
                        SpringFactoriesLoader.loadFactoryNames()
                        扫描所有jar包类路径下  META-INF/spring.factories
                        把扫描到的这些文件的内容包装成List对象
                        从List中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中

Ajoutez toutes les valeurs EnableAutoConfiguration configurées dans META-INF/spring.factories sous le chemin de classe vers le 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.h3.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.oauth3.client.servlet.OAuth3ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth3.client.reactive.ReactiveOAuth3ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth3.resource.servlet.OAuth3ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth3.resource.reactive.ReactiveOAuth3ResourceServerAutoConfiguration,\
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

Chacune de celles-ci Les classes xxxAutoConfiguration sont toutes des composants du conteneur et sont ajoutés au conteneur ; utilisez-les pour la configuration automatique ;

Chaque classe de configuration automatique exécute des fonctions de configuration automatique

Prenez HttpEncodingAutoConfiguration (configuration automatique d'encodage HTTP) comme exemple pour expliquer le principe de configuration automatique ; le cours prendra effet en fonction des différentes conditions actuelles ?

Une fois que cette classe de configuration prend effet ; cette classe de configuration ajoutera divers composants au conteneur ; les propriétés de ces composants sont obtenues à partir des classes de propriétés correspondantes, et chaque propriété de ces classes est liée au fichier de configuration ;

5) , toutes les propriétés pouvant être configurées dans le fichier de configuration sont encapsulées dans la classe xxxxProperties ; ce qui peut être configuré dans le fichier de configuration peut faire référence à la classe de propriétés correspondant à une certaine fonction

@Configuration   //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties(ServerProperties.class)  //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和 ServerProperties 绑定起来;并把 ServerProperties 加入到ioc容器中

@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效;    判断当前应用是否是web应用,如果是,当前配置类生效

@ConditionalOnClass(CharacterEncodingFilter.class)  //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)  //判断配置文件中是否存在某个配置  spring.http.encoding.enabled;如果不存在,判断也是成立的
//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
public class HttpEncodingAutoConfiguration {
  
  	//他已经和SpringBoot的配置文件映射了
  	private final HttpEncodingProperties properties;
  
   //只有一个有参构造器的情况下,参数的值就会从容器中拿
  	public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
		this.properties = properties;
	}
  
    @Bean   //给容器中添加一个组件,这个组件的某些值需要从properties中获取
	@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}

Essence:

@ConfigurationProperties(prefix = "spring.http.encoding")  //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpEncodingProperties {

   public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

xxxxAutoConfigurartion : classe de configuration automatique

Ajouter des composants au conteneur

xxxxProperties : encapsuler les propriétés pertinentes dans le fichier de configuration ;

Détails

@Annotation dérivée conditionnelle (fonction @Conditionnelle native de la version d'annotation Spring)

Fonction : doit être @ Uniquement lorsque les conditions sont spécifiées. by Conditional sont remplis, les composants sont ajoutés au conteneur et tout le contenu de la configuration prend effet

@Fonction d'annotation étendue conditionnelle (pour déterminer si les conditions actuellement spécifiées sont remplies)

@ConditionalOnJava Si la version Java du système répond aux exigences

@ConditionalOnBean Le Bean spécifié existe dans le conteneur
@ConditionalOnMissingBean Le Bean spécifié n'existe pas dans le conteneur
@ConditionalOnExpression satisfait la spécification de l'expression SpEL
@ConditionalOnClass Il existe la classe spécifiée dans le système
@ConditionalOnMissingClass Là il n'y a pas de classe spécifiée dans le système
@ConditionalOnSingleCandidate Il n'y a qu'une seule spécification dans le Bean conteneur, ou ce Bean est le Bean préféré @ConditionalOnProperty Si la propriété spécifiée dans le système a la valeur spécifiée
@ConditionalOnResource Si le fichier de ressources spécifié existe sous le chemin de classe
@ConditionalOnWebApplication Il s'agit actuellement d'un environnement Web
@ConditionalOnNotWebApplication Ce n'est actuellement pas un environnement Web
@ConditionalOnJndi JNDI Il y a des éléments spécifiés

La classe de configuration automatique doit prendre effet sous certaines conditions

Comment savoir lesquels ; les classes de configuration automatique prennent effet ?

Nous pouvons activer l'attribut debug=true ; pour laisser la console imprimer le rapport de configuration automatique, afin que nous puissions savoir facilement quelles classes de configuration automatique sont efficaces

Conclusion : Toutes les configurations automatiques de SpringBoot sont analysés et chargés au démarrage : toutes les classes de configuration automatique de spring.factories sont ici, mais elles peuvent ne pas prendre effet. Vous devez juger si les conditions sont remplies, tant que le démarreur correspondant est importé, il y aura un. lanceur correspondant. Avec le lanceur, notre configuration automatique prendra effet, et alors la configuration est réussie !

    Lorsque SpringBoot démarre, il obtient la valeur spécifiée de /META-INF/spring.factories sur le chemin des classes
  1. Importez ces classes configurées automatiquement dans le conteneur, la configuration automatique prendra effet et nous aidera à effectuer configuration automatique
  2. Dans le passé, nous devions configurer automatiquement les choses, mais maintenant SpringBoot l'a fait pour nous
  3. L'intégration de JavaEE, les solutions et les éléments de configuration automatique sont tous sous le spring-boot-autoconfigure-2.4.4 Package .jar
  4. Il renverra tous les composants qui doivent être importés sous forme de noms de classe, et ces composants seront ajoutés au conteneur Spring
  5. Il y aura également de nombreux fichiers XXXAutoConfiguration @Bean dans. le conteneur. Ce sont ces classes qui sont ajoutées au conteneur. Tous les composants nécessaires à ce scénario sont importés et configurés automatiquement @Configuration
  6. Avec la classe de configuration automatique, nous nous épargnons le travail d'écriture manuelle des fichiers de configuration !
  7. Parlez de votre compréhension de SpringBoot

    Auto-assembly
  • SpringApplication run
    • 1. Déduisez si le type d'application est un projet ordinaire ou un projet Web
    • 2. et chargez Pour tous les initialiseurs disponibles, définissez-les sur l'attribut initializers
    • 3 Recherchez tous les écouteurs d'application et définissez-les sur l'attribut auditeurs
    • 4. Déduisez et définissez la classe de définition de la méthode principale et recherchez l'exécution. classe principale
    • "SpringApplication fait principalement quatre choses" ( META-INF/spring.factories),
    • Chargez et enregistrez tous les ApplicationListener

Obtenez la classe du programme principal – run()

  • Rappelez le démarrage de tous les SpringApplicationRunListener (META-INF/spring. usines)

  • Obtenir les arguments d'application

  • Préparer l'environnement et rappeler tous les écouteurs (SpringApplicationRunListener) (conteneur d'environnement Web) – AnnotationConfigApplicationContext (normal environnement Container)

  • Auto-assembly

  • Spring Boot commence à analyser le composant EnableAutoConfiguration configuré dans META-INF/spring.factories de tous les packages jar

  • spring-boot-autoconfigure.jarMETA-INFspring.factories a heure de démarrage Configuration du composant EnableAutoConfiguration qui doit être chargée

  • Utilisez debug=true dans le fichier de configuration pour afficher les informations de la configuration automatique actuellement activée

  • La configuration automatique ajoutera un grand nombre de composants au conteneur

  • Spring Boot exécute n'importe quelle fonction. Vous devez obtenir les composants de cette fonction à partir du conteneur

Spring Boot suit toujours un standard s'il y a des composants que nous configurons nous-mêmes dans le conteneur, nous les utiliserons, sinon ; , nous utiliserons les composants configurés automatiquement qui sont enregistrés par défaut

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer