最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年01月07日 09:05:16   作者:LNMPR源碼研究  
這篇文章主要介紹了詳解SpringBoot自動配置原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、運行原理

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。

二、自定義Starter

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

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

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

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

<?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類,這個類定義了默認的屬性值,如該類中,只有一個屬性值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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Mybatis 入門之MyBatis環(huán)境搭建(第一篇)

    Mybatis 入門之MyBatis環(huán)境搭建(第一篇)

    Mybatis的前身叫iBatis,本是apache的一個開源項目, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis。這篇文章主要介紹了Mybatis入門第一篇之MyBaits環(huán)境搭建,需要的朋友參考下
    2016-12-12
  • JAVA導出CSV文件實例教程

    JAVA導出CSV文件實例教程

    這篇文章主要介紹了如何用JAVA導出CSV文件,文中案例代碼十分詳細,對大家的學習有所幫助,感興趣的朋友可以了解下
    2020-06-06
  • struts2實現(xiàn)文件下載功能

    struts2實現(xiàn)文件下載功能

    這篇文章主要為大家詳細介紹了struts2實現(xiàn)文件下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java中IO的NIO通道解析

    Java中IO的NIO通道解析

    這篇文章主要介紹了Java中IO的NIO通道解析,NIO 提供了與傳統(tǒng) BIO 模型中的 Socket 和 ServerSocket 相對應的 SocketChannel 和 ServerSocketChannel 兩種不同的套接字通道實現(xiàn),需要的朋友可以參考下
    2024-01-01
  • Centos下SpringBoot項目啟動與停止腳本的方法

    Centos下SpringBoot項目啟動與停止腳本的方法

    這篇文章主要介紹了Centos下SpringBoot項目啟動與停止腳本的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Mybatis示例之SelectKey的應用

    Mybatis示例之SelectKey的應用

    今天小編就為大家分享一篇關于Mybatis示例之SelectKey的應用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot中的依賴管理詳解

    SpringBoot中的依賴管理詳解

    這篇文章主要介紹了SpringBoot中的依賴管理詳解,傳統(tǒng)的Spring框架實現(xiàn)一個Web服務,需要導入各種依賴JAR包,然后編寫對應的XML配置文件等,相較而言,Spring Boot顯得更加方便、快捷和高效,需要的朋友可以參考下
    2023-08-08
  • JavaTCP上傳文本文件代碼

    JavaTCP上傳文本文件代碼

    今天小編就為大家分享一篇關于JavaTCP上傳文本文件代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,允許服務器主動向客戶端推送信息,同時也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法

    SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法

    這篇文章主要介紹了SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

泗洪县| 祁连县| 彩票| 富源县| 德兴市| 邛崃市| 岐山县| 自治县| 延长县| 电白县| 淅川县| 舒城县| 丰台区| 西和县| 无棣县| 靖宇县| 山丹县| 梁平县| 浦城县| 晋中市| 聂拉木县| 深州市| 延寿县| 新疆| 海淀区| 廉江市| 大化| 上思县| 饶平县| 鹿泉市| 桂平市| 特克斯县| 咸阳市| 乐东| 安福县| 西青区| 星子县| 昌宁县| 温泉县| 朔州市| 承德县|