真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理

一、運(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è)條件注解。

  • @ConditionalOnBean:當(dāng)容器里有指定的Bean為true
  • @ConditionalOnClass:當(dāng)類路徑下有指定的類為true
  • @ConditionalOnMissingBean:當(dāng)容器里沒有指定的Bean為true
  • @ConditionalOnProperty:指定的數(shù)據(jù)是否有指定的值
  • ...

了解了條件注解后,我們開始自定義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)行配置。

  • @EnableConfigurationProperties注解根據(jù)TestProperties類開啟屬性注入,允許在application.properties修改里面的屬性值。
  • @ConditionOnClass會(huì)檢測(cè)是否存在TestService類
  • @ConditionOnProperty類會(huì)查看是否開啟該自動(dòng)配置。默認(rèn)開啟(true)。
  • @ConditionOnMissingBean會(huì)檢測(cè)容器中是否有TestService類的對(duì)象,如果沒有則生成一個(gè)。
@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)。


本文名稱:SpringBoot自動(dòng)配置的實(shí)現(xiàn)原理
標(biāo)題路徑:http://weahome.cn/article/giiodj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部