Rumah  >  Artikel  >  Java  >  Apakah mata pengetahuan prinsip pemasangan automatik SpringBoot?

Apakah mata pengetahuan prinsip pemasangan automatik SpringBoot?

王林
王林ke hadapan
2023-05-15 08:01:251083semak imbas

Prinsip pemasangan automatik SpringBoot

Prinsip pemasangan automatik

pom.xml

  • kebergantungan spring-boot: Kebergantungan teras berada dalam induk projek!

  • Apabila kami menulis atau menulis beberapa kebergantungan springboot, kami tidak perlu menentukan versi, kerana terdapat gudang versi ini

Pelancar

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

Pemula: Secara terang-terangan, ini adalah senario permulaan SpringBoot

Contohnya: spring-boot-starter-web, ia akan membantu kami mengimport secara automatik semua kebergantungan persekitaran web !

SpringBoot akan menjadikan semua senario berfungsi sebagai permulaan

Apakah fungsi yang ingin kita gunakan, kita hanya perlu mencari pemula yang betul

Program utama

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

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

}

Anotasi

Prinsip:

Memuatkan kelas konfigurasi utama apabila SpringBoot bermula dan menghidupkan fungsi konfigurasi automatik @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类(类名)对应的值,然后把他们添加在容器中

Tambahkan semua nilai EnableAutoConfiguration ​​yang dikonfigurasikan dalam META- INF/spring.factories di bawah laluan kelas ke bekas

# 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

Setiap kelas xxxAutoConfiguration adalah komponen dalam bekas dan ditambahkan pada bekas Mereka melakukan konfigurasi automatik; kelas konfigurasi melaksanakan fungsi konfigurasi automatik;

Ambil HttpEncodingAutoConfiguration (konfigurasi automatik pengekodan Http) sebagai contoh untuk menerangkan prinsip konfigurasi automatik

@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;
	}

Berdasarkan keadaan semasa yang berbeza, tentukan sama ada kelas konfigurasi ini; akan berkuat kuasa?

Setelah kelas konfigurasi ini berkuat kuasa; kelas konfigurasi ini akan menambah pelbagai komponen pada bekas, sifat komponen ini diperoleh daripada kelas sifat yang sepadan, dan setiap sifat dalam kelas ini adalah sama dengan fail konfigurasi; terikat;

5), semua sifat yang boleh dikonfigurasikan dalam fail konfigurasi dikapsulkan dalam kelas xxxxProperties; apa yang boleh dikonfigurasikan dalam fail konfigurasi boleh merujuk kepada kelas harta yang sepadan dengan fungsi tertentu

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

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

Intipati:

1)、SpringBoot启动会加载大量的自动配置类

2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;

3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)

4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;

xxxxAutoConfigurartion: Kelas konfigurasi automatik;

Butiran

@Anotasi terbitan bersyarat (Fungsi asal @Bersyarat versi anotasi musim bunga)

Fungsi: Syarat yang ditentukan oleh @Conditional mestilah benar sebelum menambah komponen pada bekas dan mengkonfigurasi Semua kandungan dalam akan berkuat kuasa;

@Fungsi anotasi lanjutan bersyarat (untuk menentukan sama ada syarat yang dinyatakan semasa dipenuhi)

@ConditionalOnJava Sama ada versi java sistem memenuhi keperluan

@ConditionalOnBean Bean yang ditentukan wujud dalam bekas;

@ConditionalOnMissingBean Kacang yang ditentukan tidak wujud dalam bekas

@ConditionalOnExpression memenuhi spesifikasi ekspresi SpEL

@ConditionalOnClass Terdapat kelas tertentu dalam sistem

@ConditionalClassOn tiada kelas yang ditentukan dalam sistem

@ConditionalOnSingleCandidate bekas Terdapat hanya satu Bean yang ditentukan dalam sistem, atau Bean ini adalah Bean pilihan @ConditionalOnProperty Sama ada harta yang dinyatakan dalam sistem mempunyai nilai yang ditentukan
@ConditionalOnResource Sama ada yang dinyatakan fail sumber wujud dalam laluan kelas
@ConditionalOnWebApplication Pada masa ini ia adalah persekitaran web
@ConditionalOnNotWebApplication pada masa ini bukan persekitaran web
@ConditionalOnJndi JNDI telah menetapkan item

kelas konfigurasi automatik mesti diambil kesan di bawah keadaan tertentu;

Bagaimanakah kita tahu kelas konfigurasi automatik yang berkuat kuasa;

Kami boleh mendayakan atribut debug=true supaya konsol mencetak laporan konfigurasi automatik, supaya kami boleh mengetahui dengan mudah kelas konfigurasi automatik yang berkuat kuasa

Kesimpulan: Semua konfigurasi automatik SpringBoot adalah Imbas dan dimuatkan semasa permulaan: semua kelas konfigurasi automatik spring.factories ada di sini, tetapi mereka mungkin tidak berkuat kuasa tentukan sama ada syarat adalah benar, selagi pemula yang sepadan diimport, akan ada pemula yang sepadan Dengan permulaan Konfigurasi automatik akan berkuat kuasa, dan kemudian konfigurasi berjaya!

Apabila SpringBoot bermula, ia mendapat nilai yang ditentukan daripada /META-INF/spring.factories pada laluan kelas

Konfigurasikan ini secara automatik Kelas diimport ke dalam bekas, dan konfigurasi automatik akan berkuat kuasa, membantu kami dengan konfigurasi automatik
  1. Apa yang kami perlukan untuk mengkonfigurasi secara automatik pada masa lalu, kini SpringBoot membantu kami melakukannya
  2. Integrasi JavaEE, penyelesaian dan konfigurasi automatik semuanya berada di bawah pakej spring-boot-autoconfigure-2.4.4.jar
  3. Dia akan mengimport semua komponen yang perlu diimport , dikembalikan sebagai nama kelas, komponen ini akan ditambahkan pada bekas Spring
  4. Terdapat juga banyak fail XXXAutoConfiguration @Bean dalam bekas, dan ia adalah kelas ini yang diimport ke dalam bekas Semua komponen yang diperlukan untuk senario ini disertakan dan @Configuration
  5. dikonfigurasikan secara automatik Dengan kelas konfigurasi automatik, kami menjimatkan kerja konfigurasi penulisan secara manual fail!
  6. Bercakap tentang pemahaman anda tentang SpringBoot
  7. Auto-pendawaian

SpringApplication dijalankan
  • 1 Buat kesimpulan sama ada jenis aplikasi adalah projek biasa atau projek web
  • 2 kepada pemula Atribut
    • 3 Cari semua pendengar aplikasi dan tetapkan kepada atribut pendengar
    • 4 kelas dan cari kelas utama untuk dijalankan
    • SpringApplication terutamanya melakukan empat perkara

Prinsip permulaan SpringApplication.run (kelas program utama) SpringApplication baharu (kelas program utama)

  • Tentukan sama ada aplikasi web

  • memuat dan menyimpan semua ApplicationContextInitializer (META-INF/spring.factories),

  • Muat dan simpan semua ApplicationListeners

  • Dapatkan kelas program utama – run()

  • Panggil semula semua SpringApplicationRunListeners (META-INF/ bermula

  • spring.factories) Dapatkan ApplicationArguments

  • Sediakan persekitaran & persekitaran panggilan balikDisediakan

  • semua pendengar (SpringApplicationRunListener)
  • Cetak maklumat sepanduk

  • Buat objek bekas ioc (- AnnotationConfigEmbeddedWebApplicationContext (bekas persekitaran web) - AnnotationConfigApplicationContext (bekas persekitaran biasa)

Pemasangan automatik
  • Spring Boot mula mengimbas komponen EnableAutoConfiguration yang dikonfigurasikan dalam META-INF/spring.factories bagi semua pakej jar
  • spring-boot- autoconfigure.jarMETA-INFspring.factories mempunyai konfigurasi komponen EnableAutoConfiguration yang perlu dimuatkan semasa permulaan
  • Gunakan debug=true dalam fail konfigurasi untuk melihat maklumat konfigurasi automatik yang didayakan pada masa ini
  • Konfigurasi automatik akan menambah sejumlah besar komponen pada bekas
  • Apabila Spring Boot melakukan sebarang fungsi, ia perlu mendapatkan komponen fungsi ini daripada bekas
  • Spring Boot sentiasa mengikut piawaian; jika terdapat komponen yang dikonfigurasikan oleh kami sendiri dalam bekas, kami akan menggunakannya jika tidak, kami akan menggunakan komponen yang dikonfigurasikan secara automatik yang didaftarkan secara lalai

Atas ialah kandungan terperinci Apakah mata pengetahuan prinsip pemasangan automatik SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam