一、運(yùn)行原理
員工經(jīng)過長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)公司堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、電商網(wǎng)站開發(fā),小程序制作,軟件按需策劃設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
Spring Boot的運(yùn)行是由注解@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 {}; }
這里的關(guān)鍵功能是@Import注解。EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactoryNames方法來掃描具有MEAT-INF/spring.factories文件的jar包(1.5版本以前使用EnableAutoConfigurationImportSelector類,1.5以后這個(gè)類廢棄了使用的是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,\
里面的類都是自動(dòng)配置類,SpringBoot會(huì)根據(jù)這些自動(dòng)配置類去自動(dòng)配置環(huán)境。
下面我們就自動(dòng)動(dòng)手寫一個(gè)starter。
二、自定義Starter
首先先介紹幾個(gè)條件注解。
了解了條件注解后,我們開始自定義Starter。
1、在自定義Starter之前先要在Maven中填寫依賴。
<?xml version="1.0" encoding="UTF-8"?>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類,這個(gè)類定義了默認(rèn)的屬性值,如該類中,只有一個(gè)屬性值msg,默認(rèn)為world。@ConfigurationProperties注解會(huì)定義一個(gè)匹配,如果想修改屬性值,可以在application.properties中使用“匹配.屬性=修改的值”進(jìn)行修改。如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、完成服務(wù)類。服務(wù)類是指主要的功能類,如果沒有SpringBoot,這些服務(wù)類在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、完成自動(dòng)配置類。自動(dòng)配置類主要作用是SpringBoot的配置核心,它會(huì)寫在MEAT-INF/spring.factories中,告知SpringBoot在啟動(dòng)時(shí)去讀取該類并根據(jù)該類的規(guī)則進(jìn)行配置。
@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)容很簡(jiǎn)單,告訴SpringBoot去讀取TestServiceAutoConfiguration類。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ cn.miaolovezhen.TestServiceAutoConfiguration
好啦,搞定!下面可以使用maven install命令把starter存到本地,其他SpringBoot項(xiàng)目需要使用這個(gè)starter,直接導(dǎo)入就可以啦。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。