久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SpringBoot源碼解析-自定義Starter

 碼農(nóng)9527 2021-07-28

在SpringBoot學(xué)習(xí)的過程中,,每當(dāng)我們需要某個現(xiàn)有框架的功能時,,都是通過引入對應(yīng)的Starter,,然后由SpringBoot幫我們完成自動裝配,。說白了,,Starter就是個外部項目,,就像項目A需要調(diào)用項目B,,除了通過外部調(diào)用方式(比如遠(yuǎn)程調(diào)用),,還可以直接內(nèi)部集成B,直接本地調(diào)用,。只是在SpringBoot項目中,,需要遵循SpringBoot的規(guī)范而已。  

SpringBoot源碼解析-自定義Starter

Starter命名規(guī)范  

Spring官方定義的Starter格式:  

spring-boot-starter-{name}  

非官方(自定義)定義的Starter格式:  

{name}-spring-boot-starter  

實(shí)現(xiàn)自定義Starter  

需求  

創(chuàng)建一個Starter,,根據(jù)配置文件配置的name值,,返回"Hello"+name。  

創(chuàng)建Starter項目  

創(chuàng)建一個名為javafamily-spring-boot-starter的SpringBoot項目  

1.引入依賴  

注意:spring-boot-configuration-processor并非加載xml或者properties配置啥的,,該依賴是為了給自定義的配置類生成元數(shù)據(jù)信息的,,在yml等配置文件中,比如server.port是可以直接點(diǎn)進(jìn)去到配置類中的,如果沒有該依賴,,在配置文件直接書寫是沒有提示的,,但是不影響項目運(yùn)行。 

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
</dependency>// 為簡化開發(fā)引入 非必須<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <optional>true</optional>
</dependency>123456789101112復(fù)制代碼類型:[java]

2.編寫一個JavaFamilyService類  

import lombok.AllArgsConstructor;@AllArgsConstructorpublic class JavaFamilyService { private String name; public String family() {  return "Hello " + name;
 }

}123456789101112復(fù)制代碼類型:[java]

該類用于處理核心業(yè)務(wù),,這里的name由外部傳入,,family方法返回拼接后的字符串。  

3.定義配置屬性封裝類 

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;@Data// 讀取配置文件中以java.family為前綴的配置@ConfigurationProperties(prefix = "java.family")public class JavaFamilyServiceProperties { private String name;
}12345678910復(fù)制代碼類型:[java]

4.定義自動配置類  

import com.javafamily.service.JavaFamilyService;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;@Configuration// 當(dāng)給定的類名在類路徑上存在,,則實(shí)例化當(dāng)前Bean@ConditionalOnClass(JavaFamilyService.class)// 讓使用@ConfigurationProperties注解的類生效,,并且將該類注入到 IOC 容器中@EnableConfigurationProperties(JavaFamilyServiceProperties.class)public class JavaFamilyServiceAutoConfiguration { @Resource
 private JavaFamilyServiceProperties javaFamilyServiceProperties; @Bean
 // 被@ConditionalOnMissingBean注解修飾的同類型的Bean只能注冊一個 注冊多個時會報錯
 @ConditionalOnMissingBean
 public JavaFamilyService javaFamilyService() {  // 傳入從配置文件加載到的name屬性
  return new JavaFamilyService(javaFamilyServiceProperties.getName());
 }
}123456789101112131415161718192021222324252627復(fù)制代碼類型:[java]

5.創(chuàng)建spring.factories文件  

在resources文件夾下創(chuàng)建META-INF文件夾,在META-INF文件夾下創(chuàng)建spring.factories文件,。  

org.springframework.boot.autoconfigure.EnableAutoConfiguration=  com.javafamily.config.JavaFamilyServiceAutoConfiguration12復(fù)制代碼類型:[java]

這塊內(nèi)容在前面的源碼中講過,,就是通過SPI技術(shù)實(shí)現(xiàn)我們的自動裝配。  

整體效果圖如下:  

SpringBoot源碼解析-自定義Starter

6.引入自定義Starter  

創(chuàng)建一個任意的SpringBoot工程,,引入javafamily-spring-boot-starter依賴,。  

<dependency>
 <groupId>com.javafamily</groupId>
 <artifactId>javafamily-spring-boot-starter</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</dependency>12345復(fù)制代碼類型:[java]

在application.yml添加java.family.name配置,將值設(shè)置為JavaFamily,。  

SpringBoot源碼解析-自定義Starter

創(chuàng)建HelloController,,注入JavaFamilyService測試效果。  

import com.javafamily.service.JavaFamilyService;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestControllerpublic class HelloController { @Resource
 private JavaFamilyService javaFamilyService; @GetMapping("/test")
 public String test() {  return javaFamilyService.family();
 }
}12345678910111213141516復(fù)制代碼類型:[java]

訪問localhost:8080/test查看效果,。  

SpringBoot源碼解析-自定義Starter

至此,,自定義Starter入門就完成了,相信大家看完本篇文章,,對Starter會有更深入的理解,,我們下期再見。  

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多