前言
哈哈,本次有點標題黨的嫌疑了,話又說回來,如果只停留在Spring Boot的基本的CRUD層面,未免也太過局限了,當需要去擴展一些功能,寫一些組件的時候,就感覺無從下手了,所以本次,我們從一個標題黨開始,了解一下Spring Boot 的擴展點,可以系統的了解記憶一下,此文不是八股文,希望大家能學以致用。
Spring Boot是一個基于Spring框架的快速開發(fā)框架,做java開發(fā)的同學基本上都使用過,它通過提供一系列的自動配置和快速開發(fā)的特性,幫助我們快速搭建和開發(fā)高效、可擴展的應用程序。然而,為了滿足不同開發(fā)需求的多樣性,Spring Boot也提供了豐富的擴展點,開發(fā)人員可以通過擴展點來實現自定義的應用程序功能和行為。本文將介紹Spring Boot的擴展點分類和特點,幫助大家更好地理解和應用Spring Boot的擴展點。無論您是初學者還是有一定經驗的開發(fā)人員,本文都將為您提供一些有用的信息和思路,幫助您更好地使用Spring Boot。
冰點出品,必屬精品
1.擴展點
根據Spring Boot官方文檔,可以將Spring Boot的擴展點分為以下幾類:
這里面的每一類都事
1.1. 應用程序生命周期擴展點
應用程序生命周期擴展點是指在Spring Boot應用程序的生命周期中,提供了一系列的擴展點,開發(fā)人員可以通過實現這些擴展點來對應用程序的生命周期進行控制和定制。這些擴展點主要包括以下幾個:
此圖來自網絡
1.1.1 SpringApplicationRunListener
它是一個監(jiān)聽器接口,用于在Spring應用程序的運行生命周期中監(jiān)聽和響應相關事件??梢酝ㄟ^實現該接口來自定義應用程序的啟動和關閉行為。
1.1.2 ApplicationEnvironmentPreparedEvent
該事件在應用程序啟動前觸發(fā),用于在環(huán)境準備階段執(zhí)行一些操作,例如:加載配置文件、設置系統屬性等。
1.1.3 ApplicationPreparedEvent
該事件在應用程序上下文創(chuàng)建完成后觸發(fā),用于在應用程序準備階段執(zhí)行一些操作,例如:創(chuàng)建和初始化Bean等。
1.1.4 ApplicationStartedEvent
該事件在應用程序啟動完成后觸發(fā),用于在應用程序啟動后執(zhí)行一些操作,例如:向日志中輸出啟動信息等。
1.1.5 ApplicationReadyEvent
該事件在應用程序準備就緒后觸發(fā),用于在應用程序運行期間執(zhí)行一些操作,例如:啟動定時任務、初始化緩存等。
1.1.6 ApplicationFailedEvent
該事件在應用程序啟動失敗后觸發(fā),用于在應用程序啟動失敗時執(zhí)行一些操作,例如:記錄日志、發(fā)送告警等。
1.2. 容器擴展點
我們來先看一張圖,大概了解一下。Spring Boot容器擴展點主要用于自定義Spring容器的創(chuàng)建和配置,提供了一種靈活的方式來增強和定制Spring容器的功能,進而實現應用程序的定制化需求。
此圖來自網絡
Spring Boot的容器擴展點主要用于自定義Spring容器的創(chuàng)建和配置,通過這些擴展點,開發(fā)人員可以對Spring容器進行更加細粒度的控制和定制,以滿足特定的應用場景和需求。具體來說,容器擴展點的作用包括:
修改Bean的定義信息
BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor接口可以在Spring容器實例化Bean之前或之后修改Bean的定義信息,例如:修改Bean的屬性值、增加或刪除Bean的定義等。這些擴展點可以讓開發(fā)人員在Bean實例化之前或之后對Bean的定義進行修改,以滿足特定的需求。修改Bean的屬性值或執(zhí)行其他操作
BeanPostProcessor接口可以在Spring容器實例化Bean后修改Bean的屬性值或執(zhí)行其他操作,例如:修改Bean的屬性值、添加Bean的初始化方法等。這些擴展點可以讓開發(fā)人員在Bean實例化后對Bean的屬性值進行修改或執(zhí)行其他操作,以滿足特定的需求。自定義Bean的創(chuàng)建、配置、解析等
通過實現BeanFactoryPostProcessor和BeanPostProcessor接口,開發(fā)人員可以自定義Bean的創(chuàng)建、配置和解析等過程,以滿足特定的需求。例如,可以自定義BeanFactoryPostProcessor接口來修改Bean定義信息,自定義BeanPostProcessor接口來修改Bean的屬性值或執(zhí)行其他操作。
1.2.1 BeanFactoryPostProcessor
- 用于在Spring容器實例化Bean之前修改Bean的定義信息。通過實現該接口,開發(fā)人員可以自定義Bean的配置和解析,例如:修改Bean的屬性值、增加或刪除Bean的定義等。這種方式可以在Spring容器實例化Bean之前對Bean的定義進行修改,從而實現更加靈活的配置和定制。
1.2.2 BeanPostProcessor
_ 用于在Spring容器實例化Bean后修改Bean的屬性值或執(zhí)行其他操作。通過實現該接口,開發(fā)人員可以自定義Bean的初始化邏輯,例如:修改Bean的屬性值、添加Bean的初始化方法等。這種方式可以在Spring容器實例化Bean之后對Bean的屬性值進行修改,從而實現更加靈活的初始化邏輯。_
1.2.3 BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor繼承自BeanFactoryPostProcessor,用于在Spring容器實例化Bean定義之前修改Bean定義信息。通過實現該接口,開發(fā)人員可以自定義Bean的創(chuàng)建和解析邏輯,例如:修改Bean的屬性值、增加或刪除Bean的定義等。這種方式可以在Spring容器實例化Bean定義之前對Bean定義進行修改,從而實現更加靈活的配置和定制。
1.3. 自動配置擴展點
Spring Boot提供了多種自動配置擴展點,通過這些擴展點可以實現自動配置類的選擇、條件篩選等功能。以下是幾個常用的自動配置擴展點:
1.3.1 AutoConfigurationImportSelector
AutoConfigurationImportSelector是一個接口,用于實現自動配置類的選擇邏輯。在Spring Boot應用程序啟動時,會自動加載AutoConfigurationImportSelector接口的實現類,實現類會根據條件進行篩選,選擇符合條件的自動配置類并加載。
1.3.2 EnableAutoConfiguration
EnableAutoConfiguration是一個注解,用于開啟自動配置功能。在應用程序中添加該注解后,Spring Boot會自動加載符合條件的自動配置類,實現自動配置的功能。該注解可以通過exclude屬性排除一些自動配置類,也可以通過excludeName屬性排除一些自動配置類的名稱。
1.3.3 ConditionalOnClass
ConditionalOnClass是一個注解,用于在類路徑中存在指定的類時才會加載自動配置類或Bean。可以使用該注解來檢查類的可用性,如果類存在,則加載自動配置類或Bean,否則跳過。
1.3.4 ConditionalOnBean
ConditionalOnBean是一個注解,用于在容器中存在指定的Bean時才會加載自動配置類或Bean??梢允褂迷撟⒔鈦頇z查Bean的可用性,如果Bean存在,則加載自動配置類或Bean,否則跳過。
1.3.5 ConditionalOnMissingBean
ConditionalOnMissingBean是一個注解,用于在容器中不存在指定的Bean時才會加載自動配置類或Bean。可以使用該注解來檢查Bean的可用性,如果Bean不存在,則加載自動配置類或Bean,否則跳過。
這些自動配置擴展點可以幫助開發(fā)人員實現自動配置類的選擇、條件篩選等功能,從而實現更加靈活、可擴展的應用程序。通過使用這些擴展點,開發(fā)人員可以自定義自動配置的功能和條件,以滿足特定的需求。
1.4. Web擴展點
Spring Boot提供了多種擴展點用于自定義Web應用程序的配置和行為。其中,以下四個擴展點用于處理Web請求和響應相關的操作:
1.4.1 WebMvcConfigurer
WebMvcConfigurer是一個接口,用于自定義Spring MVC的配置。通過實現該接口,可以添加攔截器、消息轉換器等,以滿足特定的需求。例如,可以添加攔截器來驗證請求的安全性,或者添加消息轉換器來支持自定義的數據格式。
1.4.2 HandlerInterceptor
HandlerInterceptor是一個接口,用于自定義攔截器。攔截器可以在請求處理前或處理后執(zhí)行自定義的邏輯,例如:驗證用戶權限、記錄請求日志等。通過實現該接口,可以實現自定義的攔截器,以滿足特定的需求。
1.4.3 HandlerMethodArgumentResolver
HandlerMethodArgumentResolver是一個接口,用于自定義請求參數解析器。在處理請求時,Spring會將請求中的參數解析為對應的Java對象。通過實現該接口,可以自定義請求參數解析器,以支持自定義的參數類型或數據格式。
1.4.4 HandlerMethodReturnValueHandler
HandlerMethodReturnValueHandler是一個接口,用于自定義請求返回值處理器。在處理請求時,Spring會將Java對象轉換為響應結果并返回給客戶端。通過實現該接口,可以自定義請求返回值處理器,以支持自定義的數據格式或響應結果。
總之,這些擴展點可以幫助開發(fā)人員自定義Web應用程序的配置和行為,以滿足特定的需求。通過實現這些擴展點,可以添加攔截器、消息轉換器等,實現自定義的請求參數解析器和返回值處理器,從而實現更加靈活、可擴展的Web應用程序。
1.5. 數據庫擴展點
Spring Boot提供了多種數據訪問相關的擴展點,以下是幾個常用的擴展點:
1.5.1 DataSource
DataSource是一個接口,用于定義數據源的配置信息。數據源是應用程序與數據庫之間的連接池,通過數據源可以配置數據庫驅動、連接池大小等屬性,與數據庫建立連接。
1.5.2 TransactionManager
TransactionManager是一個接口,用于定義事務管理器的配置信息。事務管理器用于管理應用程序中的事務,例如:事務隔離級別、超時時間等。通過實現TransactionManager接口,可以自定義事務管理器的配置信息,以滿足特定的需求。
1.5.3 JdbcTemplate
JdbcTemplate是Spring提供的數據訪問模板,用于簡化JDBC操作。通過JdbcTemplate,可以更加方便地進行數據庫操作,例如:執(zhí)行SQL語句、執(zhí)行存儲過程等。JdbcTemplate封裝了大量的JDBC操作,提供了更加簡單、易用的API,可以大大提高開發(fā)效率。
1.5.4 JpaVendorAdapter
JpaVendorAdapter是一個接口,用于定義JPA廠商適配器的配置信息。JPA廠商適配器用于適配不同的JPA實現,例如:Hibernate、EclipseLink等。通過實現JpaVendorAdapter接口,可以自定義JPA廠商適配器的配置信息,例如:數據庫方言、JPA實現等。
1.6. 安全擴展點
Spring Boot提供了多種安全相關的擴展點 我們基本上用的很少,大家只需要了解一下。后續(xù)我會從這個里面挑選兩個,寫個項目真實使用的示例,供大家參考。
安全擴展點可以幫助開發(fā)人員實現更加靈活、可擴展的安全功能,從而滿足特定的需求。通過使用這些擴展點,可以自定義Spring Security的配置信息、Web應用程序的安全配置信息,以及自定義用戶認證方式、用戶信息獲取方式等,以實現更加定制化的安全功能。
1.6.1 SecurityConfigurerAdapter
SecurityConfigurerAdapter是一個類,用于定義Spring Security的配置信息。通過繼承該類,可以實現用戶認證和授權、添加安全過濾器等功能。SecurityConfigurerAdapter提供了一系列的方法,用于配置Spring Security的不同方面,例如:配置用戶認證、授權、添加過濾器等。
1.6.2 WebSecurityConfigurerAdapter
WebSecurityConfigurerAdapter是一個類,用于定義Web應用程序的安全配置信息。通過繼承該類,可以實現定義安全規(guī)則、設置用戶認證和授權等功能。WebSecurityConfigurerAdapter提供了一系列的方法,用于配置Web應用程序的安全性,例如:配置HTTP安全規(guī)則、配置表單登錄、配置用戶認證等。
1.6.3 AuthenticationProvider
AuthenticationProvider是一個接口,用于自定義用戶認證方式。通過實現該接口,可以實現自定義的用戶名和密碼認證方式、OAuth2認證方式等。AuthenticationProvider提供了一系列的方法,用于實現用戶認證的不同方面,例如:驗證用戶密碼、獲取用戶權限等。
1.6.4 UserDetailsService
UserDetailsService是一個接口,用于自定義用戶信息獲取方式。通過實現該接口,可以從數據庫或其他數據源中獲取用戶信息。UserDetailsService提供了一個方法,用于根據用戶名獲取用戶信息,開發(fā)人員可以根據實際需求進行自定義實現。
1.7. 其他擴展點
下面這些擴展點不知道怎么歸類,有點雜,我們暫且歸類為其他擴展點吧,但是都是比較常用的一些擴展點??梢詭椭_發(fā)人員實現更加靈活、可擴展的應用程序功能,從而滿足特定的需求。通過使用這些擴展點,可以自定義命令行操作、命令行參數處理方式、嵌入式Servlet容器的配置信息、健康檢查指標以及異常處理方式等,以實現更加定制化的應用程序功能。
1.7.1 CommandLineRunner
CommandLineRunner是一個接口,用于在Spring Boot應用程序啟動后執(zhí)行一些命令行操作。例如:初始化數據、啟動定時任務等。通過實現CommandLineRunner接口,可以自定義需要執(zhí)行的命令行操作。
1.7.2 ApplicationRunner
ApplicationRunner是一個接口,與CommandLineRunner類似,也用于在Spring Boot應用程序啟動后執(zhí)行一些命令行操作。但其提供了更靈活的參數處理方式,可以接收一個ApplicationArguments對象,從而更加方便地處理命令行參數。
1.7.3 CommandLinePropertySource
CommandLinePropertySource是一個接口,用于將命令行參數轉換為Spring環(huán)境中的屬性值。例如:將命令行參數–server.port=8080轉換為spring.server.port=8080的屬性值。通過實現CommandLinePropertySource接口,可以自定義命令行參數的處理方式,以滿足特定的需求。
1.7.4 EmbeddedServletContainerCustomizer
EmbeddedServletContainerCustomizer是一個接口,用于自定義嵌入式Servlet容器的配置信息。例如:自定義端口號、設置SSL證書等。通過實現EmbeddedServletContainerCustomizer接口,可以實現嵌入式Servlet容器的自定義配置。
1.7.5 HealthIndicator
HealthIndicator是一個接口,用于定義應用程序的健康檢查指標。例如:檢查數據庫連接是否正常、檢查磁盤使用情況等。通過實現HealthIndicator接口,可以自定義應用程序的健康檢查指標,以便及時發(fā)現和解決應用程序的問題。
1.7.6 ErrorController
ErrorController是一個接口,用于自定義應用程序的異常處理方式。例如:自定義404頁面、重定向到錯誤頁面等。通過實現ErrorController接口,可以自定義應用程序的異常處理方式,以提高用戶的體驗。
2. 參考文檔
- Spring Boot官方文檔:https://spring.io/projects/spring-boot
- Spring Boot Reference Guide:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
- Spring Boot官方文檔相關 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-bean-definitions
- Spring Boot 自動配置 https://docs.spring.io/spring-boot/docs/3.1.2/reference/html/auto-configuration-classes.html#appendix.auto-configuration-classes
文章來源:http://www.zghlxwxcb.cn/news/detail-607451.html
??好了,本次的Spring Boot 的擴展點分享就到這兒,我是冰點,下次見。如果我的文章對你有所收獲,可以給個贊。如果有疑問可以在評論區(qū)留言。
文章來源地址http://www.zghlxwxcb.cn/news/detail-607451.html
到了這里,關于擴展點都不知道不要說你用了Spring Boot的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!