Spring Boot是基于Spring開發(fā)的,它就相當于maven整合了所有jar包,Spring Boot整合了所有框架。其設計目的是用來簡化新 Spring 應用的初始搭建以及開發(fā)過程,那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