手寫自定義springboot-starter,感受框架的魅力和原理( 二 )

2. 編寫一個配置文件這里為了獲取配置文件中的屬性值,springboot自動配置源碼里大部分都是,這樣實現在一個配置文件中書寫,其他的可以按照開頭獲取到屬性和值?。?
/** * @author wangzhenjun * @date 2022/10/14 16:28 */@Data@ConfigurationProperties("wang.name")public class MyProperties {private String prefix;private String suffix;}3. 編寫自動配置import com.wang.springbootautoconfigure.properties.MyProperties;import com.wang.springbootautoconfigure.service.HelloService;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;/** * @author wangzhenjun * @date 2022/10/14 16:33 */@Configuration//沒有這個bean的時候才會生效@ConditionalOnMissingBean(HelloService.class)// 加載配置文件,讓它成為容器中的bean@EnableConfigurationProperties(MyProperties.class)public class ServiceAutoConfiguration { /*** 把剛剛寫的服務,加入到容器中*/@Beanpublic HelloService helloService (){return new HelloService();}}主要就是condition下的幾個注解,來完成bean是否加入到容器中:常用的:

  • @ConditionalOnClass
  • @ConditionalOnMissingClass
  • @ConditionalOnBean
  • @ConditionalOnMissingBean
  • @ConditionalOnProperty
    手寫自定義springboot-starter,感受框架的魅力和原理

    文章插圖
4. 新建spring.factories我們看到源碼里自動配置,就是從這個文件獲取加載,所以我們模仿這新建一個,這樣就可以掃描加入容器中?。?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
如果是springboot2.7以上就是:文件夾名稱:META-INF.spring文件名稱:org.springframework.boot.autoconfigure.AutoConfiguration.imports
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
里面直接寫全類名即可!
5. 打包先把spring-boot-autoconfigure打包到本地庫,在打包spring-boot-starter,順序一定要有,不然找不到前者的包?。?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
六、測試我們那一個新項目進行測試 , 新項目小編就不帶大家建了!
1. 導入咱們的starter依賴<dependency><groupId>com.wang</groupId><artifactId>spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>2. 添加配置文件wang: name:prefix: hellosuffix: 886
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
3. 新建controller測試類@RestController@RequestMapping("/test")public class TestController {@Autowiredprivate HelloService helloService;@GetMapping("/starter")public String starter(){return helloService.HelloWord("tom");}}4. 測試訪問成功訪問 , 不過中文是有亂碼的,小編找不到解決方法,有懂的還請留言告知?。?主流程通了就行,慢慢理解了自動配置的魅力!總流程應該就是這樣的:
引入starter --- xxxAutoConfiguration --- 容器中放入組件 ---- 綁定xxxProperties ---- 配置項
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
中文是亂碼,可能是servlet沒有吧 , 有懂的可以留言告訴小編方案,謝謝大家?。?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
七、總結一看會就,一動手就廢!大家還是要做自己實操,不要眼高手低,這樣才會有收獲,根本就是約定大于配置+SPI發現機制!還有就是一些經常出現在源碼里的注解,大家記住就可以自己寫starter了!
可以看下一小編的微信公眾號 , 和網站文章首發看,歡迎關注?。?
手寫自定義springboot-starter,感受框架的魅力和原理

文章插圖
點擊訪問!小編自己的網站,里面也是有很多好的文章哦!
【手寫自定義springboot-starter,感受框架的魅力和原理】

推薦閱讀