您好,歡迎來到賦能網(wǎng)!

pringboot自動配置原理是什么?pringboot自動配置原理實現(xiàn)

賦能網(wǎng) 2023-05-09 3864

Spring Boot是基于Spring開發(fā)的,它就相當于maven整合了所有jar包,Spring Boot整合了所有框架。其設計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程,那springboot自動配置原理是什么?下面來我們就來給大家講解一下。

springboot自動配置工作原理

1運行原理

Spring Boot的運行是由注解@EnableAutoConfiguration提供的。

@Target(
{
    ElementType.TYPE
})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Inherited
@AutoConfigurationPackage
@import(
{
    EnableAutoConfigurationimportSelector.class
})
public @interface EnableAutoConfiguration
{
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    Class < ? > [] exclude() default
    {};
    String[] excludeName() default
    {};
}

這里的關鍵功能是@import注解。EnableAutoConfigurationimportSelector使用SpringFactoriesLoader.loadFactoryNames方法來掃描具有MEAT-INF/spring.factories文件的jar包(1.5版本以前使用EnableAutoConfigurationimportSelector類,1.5以后這個類廢棄了使用的是AutoConfigurationimportSelector類),下面是spring-boot-autoconfigure-1.5.4.RELEASE.jar下的MEAT-INF中的spring.factories文件的部分內(nèi)容。

#
Initializers
org.springframework.context.ApplicationContextInitializer = \
    org.springframework.boot.autoconfigure.SharedmetadataReaderFactoryContextInitializer, \
    org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer# 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.OnClassCondition# 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.cloud.CloudAutoConfiguration, \
    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration, \

里面的類都是自動配置類,SpringBoot會根據(jù)這些自動配置類去自動配置環(huán)境。

下面我們就自動動手寫一個starter。

2自定義Starter

首先先介紹幾個條件注解。

@ConditionalOnBean:當容器里有指定的Bean為true

@ConditionalOnClass:當類路徑下有指定的類為true

@ConditionalOnMissingBean:當容器里沒有指定的Bean為true

@ConditionalOnProperty:指定的數(shù)據(jù)是否有指定的值

...

了解了條件注解后,我們開始自定義Starter。

1、在自定義Starter之前先要在Maven中填寫依賴。

              

2、完成TestProperties類,這個類定義了默認的屬性值,如該類中,只有一個屬性值msg,默認為world。@ConfigurationProperties注解會定義一個匹配,如果想修改屬性值,可以在application.properties中使用“匹配.屬性=修改的值”進行修改。如test.msg = tan

@ConfigurationProperties(prefix = "test")
public class TestProperties
{
    private static final String MSG = "springboot";
    private String msg = MSG;
    public String getMsg()
    {
        return msg;
    }
    public void setMsg(String msg)
    {
        this.msg = msg;
    }
}

3、完成服務類。服務類是指主要的功能類,如果沒有SpringBoot,這些服務類在Spring中都是需要自己去配置生成的。如SpringMVC中的DispatcherServlet、Mybatis的DataSource等。

public class TestService
{
    private String msg;
    public String sayHello()
    {
        return "Hello " + msg;
    }
    public String getMsg()
    {
        return msg;
    }
    public void setMsg(String msg)
    {
        this.msg = msg;
    }
}

4、完成自動配置類。自動配置類主要作用是SpringBoot的配置核心,它會寫在MEAT-INF/spring.factories中,告知SpringBoot在啟動時去讀取該類并根據(jù)該類的規(guī)則進行配置。

@EnableConfigurationProperties注解根據(jù)TestProperties類開啟屬性注入,允許在application.properties修改里面的屬性值。

@ConditionOnClass會檢測是否存在TestService類

@ConditionOnProperty類會查看是否開啟該自動配置。默認開啟(true)。

@ConditionOnMissingBean會檢測容器中是否有TestService類的對象,如果沒有則生成一個。

@Configuration
@EnableConfigurationProperties(TestProperties.class)
@ConditionalOnClass(TestService.class)
@ConditionalOnProperty(prefix = "test", value = "enabled", matchIfMissing = true)
public class TestServiceAutoConfiguration
{
    @Autowired
    TestProperties testProperties;
    @Bean
    @ConditionalOnMissingBean(TestService.class)
    public TestService testService()
    {
        TestService testService = new TestService();
        testService.setMsg(testProperties.getMsg());
        return testService;
    }
}

5、最后一步,不要忘記在在MEAT-INF文件夾中創(chuàng)建spring.factories文件。內(nèi)容很簡單,告訴SpringBoot去讀取TestServiceAutoConfiguration類。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.miaolovezhen.TestServiceAutoConfiguration

這就是SpringBoot自動配置的原理,SpringBoot能夠快速創(chuàng)建獨立運行的Spring項目以及主流框架集成,可以簡化開發(fā),是開發(fā)人員更加高效的開發(fā)項目!最后大家如果想要了解更多其他工具教程知識,敬請關注賦能網(wǎng)。

本文鏈接:

本文章“pringboot自動配置原理是什么?pringboot自動配置原理實現(xiàn)”已幫助 3864 人

免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權侵權的法律責任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579

如果本頁不是您要找的課程,您也可以百度查找一下: