摘要:作者譚淼一運行原理的運行是由注解提供的。完成自動配置類。自動配置類主要作用是的配置核心,它會寫在中,告知在啟動時去讀取該類并根據該類的規則進行配置。會檢測是否存在類類會查看是否開啟該自動配置。
作者:譚淼
一、運行原理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文件的部分內容。
# 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會根據這些自動配置類去自動配置環境。
下面我們就自動動手寫一個starter。
二、自定義Starter首先先介紹幾個條件注解。
@ConditionalOnBean:當容器里有指定的Bean為true
@ConditionalOnClass:當類路徑下有指定的類為true
@ConditionalOnMissingBean:當容器里沒有指定的Bean為true
@ConditionalOnProperty:指定的數據是否有指定的值
...
了解了條件注解后,我們開始自定義Starter。
1、在自定義Starter之前先要在Maven中填寫依賴。
4.0.0 cn.miaolovezhen spring-boot-starter-test 0.0.1-SNAPSHOT jar spring-boot-starter-test Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.6.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-autoconfigure 1.5.4.RELEASE
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在啟動時去讀取該類并根據該類的規則進行配置。
@EnableConfigurationProperties注解根據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文件夾中創建spring.factories文件。內容很簡單,告訴SpringBoot去讀取TestServiceAutoConfiguration類。
org.springframework.boot.autoconfigure.EnableAutoConfiguration= cn.miaolovezhen.TestServiceAutoConfiguration
好啦,搞定!下面可以使用maven install命令把starter存到本地,其他SpringBoot項目需要使用這個starter,直接導入就可以啦。
?
參考:《java EE開發的顛覆者:springboot實戰》文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72832.html
摘要:開啟自動配置功能后文詳解這個注解,學過的同學應該對它不會陌生,就是掃描注解,默認是掃描當前類下的。簡單來說,這個注解可以幫助我們自動載入應用程序所需要的所有默認配置。簡單理解這二者掃描的對象是不一樣的。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學習...
摘要:基礎入門篇簡介可以基于輕松創建可以運行的獨立的生產級的應用程序。對平臺和第三方類庫我們有自己看法和意見約定大于配置。官網目前最新版本是我們接下來就在這個版本的基礎上面進行學習。變成項目引入依賴。 SpringBoot基礎入門篇 簡介 Spring Boot可以基于Spring輕松創建可以運行的、獨立的、生產級的應用程序。 對Spring平臺和第三方類庫我們有自己看法和意見(約定大于配置...
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
閱讀 1698·2023-04-26 01:02
閱讀 4841·2021-11-24 09:39
閱讀 1803·2019-08-30 15:44
閱讀 2874·2019-08-30 11:10
閱讀 1783·2019-08-30 10:49
閱讀 984·2019-08-29 17:06
閱讀 609·2019-08-29 16:15
閱讀 902·2019-08-29 15:17