iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 10

Day09 - 深入理解自動配置原理之spring-boot-starter

  • 分享至 

  • xImage
  •  

Day09 - 深入理解自動配置原理之spring-boot-starter

前言

再深入理解配置原理之前我們需要再複習一下前三天的東西,這樣才能真正理解它的原理

  1. day06 我們理解了一些基本向Container註冊組件的Annotation
    • @Configuration 配置類等同於過去我們使用xml的方式註冊組件,tag等同於@Bean
    • @Controller、 @Service、@Repository、@Component 等價的Annotation作為業務邏輯分層的識別
  2. day07 我們討論了@ConditionalOnXXX,你可以按照某些條件(OnClass/OnBean)成立下才向Container註冊元件
  3. day08 我們討論了@EnableConfigurationProperties啟動哪些類別與配置文件綁定並放到Container中,該類需要標註前綴@ConfigurationProperties(prefix = "emp")

專案建立

創建day09_autoconfigure_insight專案

https://ithelp.ithome.com.tw/upload/images/20230925/20128084tEkAlayGdJ.png
https://ithelp.ithome.com.tw/upload/images/20230925/20128084FqPQXgtHhl.png

深入理解自動配置原理之spring-boot-starter

我們從pom.xml開始一層一層往像看吧,起手式有兩個場景啟動器(starter)
https://ithelp.ithome.com.tw/upload/images/20230925/20128084wlGhOhsaNi.png

starter-web

點進去發現還有三個場景啟動器,裡面有spring-boot-starter,starter-tomcat中沒有spring-boot-starter
https://ithelp.ithome.com.tw/upload/images/20230925/20128084ujCg98sxYM.png

starter-json

裡面有spring-boot-starter
https://ithelp.ithome.com.tw/upload/images/20230925/20128084cIvhQME8QC.png

starter-test

裡面有spring-boot-starter
https://ithelp.ithome.com.tw/upload/images/20230925/20128084ndhpp3OyXL.png

小結

多數的starter中會有spring-boot-starter

spring-boot-starter

自動裝配的秘密應該就藏在這
https://ithelp.ithome.com.tw/upload/images/20230925/20128084nAMhXe7EJR.png

spring-boot-autoconfigure package

裝載著好多好多的配置類,我們來看看h2裏頭的樣子吧
https://ithelp.ithome.com.tw/upload/images/20230925/20128084GpGwiM78i1.png

h2 - @EnableConfigurationProperties

有我們熟悉的@EnableConfigurationProperties,他要啟動H2ConsoleProperties.class與文件綁定並將H2ConsoleAutoConfiguration中的@Bean放在container中
https://ithelp.ithome.com.tw/upload/images/20230925/20128084JOboohqp6L.png
果然H2ConsoleProperties.class中告訴我們他跟配置文件綁定所需的前綴
https://ithelp.ithome.com.tw/upload/images/20230925/20128084xQjbqXf08b.png

h2 - @AutoConfiguration

對註解點進去看就會發現他其實就是@Configuration配置類
https://ithelp.ithome.com.tw/upload/images/20230925/20128084VdW1XOWJXH.png

h2 - @ConditionalOnClass

所以只要這個類路徑下有這個JakartaWebServlet.class這個配置類就會被註冊到Container中

小結

一旦配置類生效,我們就可以使用h2囉

Reference


上一篇
Day08 - 常用註解-屬性綁定
下一篇
Day10 - 深入理解自動配置原理之@SpringApplcation
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言