国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - SpringBoot自動配置的實現(xiàn)原理

SpringBoot自動配置的實現(xiàn)原理

2021-06-28 10:19LNMPR源碼研究 Java教程

這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、運行原理

spring boot的運行是由注解@enableautoconfiguration提供的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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以后這個類廢棄了使用的是autoconfigurationimportselector類),下面是spring-boot-autoconfigure-1.5.4.release.jar下的meat-inf中的spring.factories文件的部分內(nèi)容。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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。

二、自定義starter

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

  • @conditionalonbean:當(dāng)容器里有指定的bean為true
  • @conditionalonclass:當(dāng)類路徑下有指定的類為true
  • @conditionalonmissingbean:當(dāng)容器里沒有指定的bean為true
  • @conditionalonproperty:指定的數(shù)據(jù)是否有指定的值
  • ...

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
  xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelversion>4.0.0</modelversion>
 
  <groupid>cn.miaolovezhen</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <version>0.0.1-snapshot</version>
  <packaging>jar</packaging>
 
  <name>spring-boot-starter-test</name>
  <description>demo project for spring boot</description>
 
  <parent>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-starter-parent</artifactid>
   <version>1.5.6.release</version>
   <relativepath/> <!-- lookup parent from repository -->
  </parent>
 
  <properties>
   <project.build.sourceencoding>utf-8</project.build.sourceencoding>
   <project.reporting.outputencoding>utf-8</project.reporting.outputencoding>
   <java.version>1.8</java.version>
  </properties>
 
  <dependencies>
   <dependency>
     <groupid>org.springframework.boot</groupid>
     <artifactid>spring-boot-autoconfigure</artifactid>
     <version>1.5.4.release</version>
   </dependency>
  </dependencies>
 
</project>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@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等。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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ī)則進(jìn)行配置。

  • @enableconfigurationproperties注解根據(jù)testproperties類開啟屬性注入,允許在application.properties修改里面的屬性值。
  • @conditiononclass會檢測是否存在testservice類
  • @conditiononproperty類會查看是否開啟該自動配置。默認(rèn)開啟(true)。
  • @conditiononmissingbean會檢測容器中是否有testservice類的對象,如果沒有則生成一個。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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類。

?
1
2
org.springframework.boot.autoconfigure.enableautoconfiguration=\
cn.miaolovezhen.testserviceautoconfiguration

好啦,搞定!下面可以使用maven install命令把starter存到本地,其他springboot項目需要使用這個starter,直接導(dǎo)入就可以啦。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://segmentfault.com/a/1190000017780558

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美视频免费看 | 欧美日韩精品网站 | 91免费在线播放 | 国产精品一二三区 | 欧美大片一区二区 | 午夜视频网站 | 欧美第8页 | 国产亚洲精品美女久久久久久久久久 | 欧美三级网址 | 亚洲欧美另类久久久精品2019 | 欧美精品一区三区 | 日韩欧美中文字幕在线视频 | 高清国产一区二区三区四区五区 | 精品久久久久久国产 | 污污视频免费网站 | 91麻豆精品国产91久久久更新资源速度超快 | 国产伦精品一区二区三区 | 国产在线观看一区二区三区 | 日日久 | 亚洲欧美日韩在线 | 精品天堂 | 91视频国产精品 | 九热精品 | 国产精品区一区二区三区 | 黄色一级免费大片 | 国产91精品一区二区绿帽 | 欧美一区二区在线播放 | 黄片毛片毛片毛片 | 国产综合视频 | 黄色网免费看 | 国产精品亚洲第一区在线暖暖韩国 | av网站在线播放 | av片免费 | 中外毛片| 久久国产精品一区二区 | 日韩午夜在线视频 | 在线一级片 | 超碰官网 | 久久亚| 黄色一级片久久 | 精品成人在线视频 |