Spring Boot Starter介紹

前言

大概10來年以前,當時springboot剛剛出現并沒有流行,當時的Java開發者們開發Web應用主要是使用spring整合springmvc或者struts、iBatis、hibernate等開發框架來進行開發。項目里一般有許多xml文件配置,其中配置了很多項目中需要用到的Bean,掃描的路徑等等,類似下面這樣:
https://www.chengpei.top/upload/spring-xml.png
看起來很麻煩,但是相比于讓我們自己在代碼里自己構建各種對象,自己的set各種屬性,自己維護大量對象的依賴關系使用,這樣預先配置交給Spring管理,后續采用依賴注入的方式在需要的地方拿來使用的方式,已經是相當的舒服了。

SpringBoot

SpringBoot框架的命名關鍵在"Boot"上,或許Boot Spring更能說明這個微框架設計的初衷,也就是快速啟動一個Spring應用。快在哪里呢,這里如果我們要在項目里整合Redis,則只需要添加如下的依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

然后添加上redis的連接參數,就可以需要操作Redis的地方注入RedisTemplate對象來使用了,不需要在xml中配置RedisConnectionFactoryRedisTemplate等相關依賴的類了。

spring-boot-autoconfigure

這里有個比較關鍵的依賴spring-boot-autoconfigure,里面有一個RedisAutoConfiguration

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBean(name = "redisTemplate")public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBeanpublic StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}

這里的@ConditionalOnClass是一個基于條件的配置,在滿足條件時會加載當前配置類,類似的注解在org.springframework.boot.autoconfigure.condition包下還有許多,例如:
@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnMissingClass
@ConditionalOnMissingBean
@ConditionalOnProperty

有了這些注解的配合,我們就可以結合@EnableAutoConfigurationn實現基于條件的自動配置了。
SpringBoot之所以能夠流行,很大一部分功勞需要歸功于它預先提供的一系列自動配置的依賴模塊,而這些依賴模塊都是基于以上注解實現的,這也意味著所有的這些依賴模塊都是按需加載的,只有符合某些特定條件,這些依賴模塊才會生效,這也就是我們所謂的“智能”自動配置。

spring.factories

例如以上redis自動配置的例子,這里只要環境中有RedisOperations就會自動配置Redis相關類,你可以在這個自動配置類附近找到許多這樣的xxxxAutoConfiguration,很多組建都可以類似這樣通過引入依賴后直接使用,但是如果只有自動配置類的話,其實這個類也不會被加載,因為我們在啟動SpringBoot應用時,使用的@SpringBootApplication注解,他只會自動掃描當前包以及子包下的類,如果掃描不到自然也不會加載了,所以這里還要配合META-INF/spring.factories文件,文件中配置了所有需要被掃描到的自動裝配類,SpringBoot應用啟動時,會由SpringFactoriesLoader取讀取該文件加載,這里比較像Java SPI機制,對Java SPI感興趣也可以看看這篇博文:Java SPI機制介紹及原理分析
以上就是SpringBoot核心功能Starter的一個介紹,下一篇博文(實現一個自己的spring-boot-starter,基于SQL生成HTTP接口)我會基于這個原理實現一個自己的SpringBootStarter模塊,只要引入了該模塊,項目就自然具有了通過配置SQL自動生成Http接口的能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66927.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試題2025-Spring

講師&#xff1a;鄧澎波 Spring面試專題 1.Spring應該很熟悉吧&#xff1f;來介紹下你的Spring的理解 1.1 Spring的發展歷程 先介紹Spring是怎么來的&#xff0c;發展中有哪些核心的節點&#xff0c;當前的最新版本是什么等 通過上圖可以比較清晰的看到Spring的各個時間版本對…

Linux 切換到 Root 用戶的方式及差異詳解

在 Linux 系統中&#xff0c;切換到 root 用戶進行管理和操作是常見需求。不同的切換方法會影響環境變量、工作目錄以及加載的配置文件。本文將介紹幾種常用的切換方式及它們的特點。 切換到 Root 用戶的主要方式 1. sudo su 這是通過 sudo 提權后調用 su 切換到 root 用戶的…

虹科分享 | 汽車NVH小課堂之聽音辨故障

隨著車主開始關注汽車抖動異響問題&#xff0c;如何根據故障現象快速診斷異響來源&#xff0c;成了汽修人的必修課。 一個比較常用的方法就是靠“聽”——“聽音辨故障”。那今天&#xff0c;虹科Pico也整理了幾個不同類型的異響聲音&#xff0c;一起來聽聽看你能答對幾個吧 汽…

淺談Redis

2007 年&#xff0c;一位程序員和朋友一起創建了一個網站。為了解決這個網站的負載問題&#xff0c;他自己定制了一個數據庫。于2009 年開發&#xff0c;稱之為Redis。這位意大利程序員是薩爾瓦托勒桑菲利波(Salvatore Sanfilippo)&#xff0c;他被稱為Redis之父&#xff0c;更…

element tbas增加下拉框

使用Tabs 標簽頁的label插槽&#xff0c;嵌入Dropdown 下拉菜單&#xff0c;實現Tabs 標簽頁增加下拉切換功能 Tabs 標簽頁 tab-click"事件"&#xff08;這個事件當中到擁有下拉框的tab里時&#xff0c;可以存一下Dropdown 第一個菜單的id&#xff0c;實現點擊到擁有…

SQL-leetcode—1179. 重新格式化部門表

1179. 重新格式化部門表 表 Department&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中&#xff0c;(id, month) 是表的聯合主鍵。 這個表格有關…

【Address Overfitting】解決過擬合的三種方法

目錄 1. 收集更多數據實踐方法&#xff1a;適用場景&#xff1a;優缺點&#xff1a; 2. 特征選擇方法介紹&#xff1a;實踐示例&#xff1a;適用場景&#xff1a;優缺點&#xff1a; 3. 正則化&#xff08;Regularization&#xff09;正則化類型&#xff1a;實踐示例&#xff1…

面向通感一體化的非均勻感知信號設計

文章目錄 1 非均勻信號設計的背景分析1.1 基于OFDM波形的感知信號1.2 非均勻信號設計的必要性和可行性1.2 非均勻信號設計的必要性和可行性 3 通感一體化系統中的非均勻信號設計方法3.1 非均勻信號的設計流程&#xff08;1&#xff09;均勻感知信號設計&#xff08;2&#xff0…

【深度學習】搭建PyTorch神經網絡進行氣溫預測

第一步 數據加載與觀察 ①導包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline ②加載數據 features pd.read_csv(…

ESP8266 NodeMCU與WS2812燈帶:實現多種花樣變換

在現代電子創意項目中&#xff0c;LED燈帶的應用已經變得極為廣泛。通過結合ESP8266 NodeMCU的強大處理能力和FastLED庫的高效功能&#xff0c;我們可以輕松實現多達100種燈帶變換效果。本文將詳細介紹如何使用Arduino IDE編程&#xff0c;實現從基礎到高級的燈光效果&#xff…

pycharm踩坑(1)

由于我重裝系統&#xff0c;導致我的pycharm需要進行重裝&#xff0c;因此我覺得需要記錄一下&#xff0c;pycharm的正確使用方法 漢化 漢化很重要&#xff0c;除非你從小就雙語教學&#xff0c;不然你看著那些英文就是會消耗大量的精力 我使用的pycharm版本是pycharm-commun…

#HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依賴引入

oh-package.json5 用于描述包名、版本、入口文件和依賴項等信息。 {"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic…

OpenCV2D 特征框架 (11)特征檢測與描述用于檢測二值圖像中連通區域(即“斑點”或“blob”)的類cv::SimpleBlobDetector的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::SimpleBlobDetector 是 OpenCV 中用于檢測二值圖像中連通區域&#xff08;即“斑點”或“blob”&#xff09;的類。這些連通區域可以是白色前…

關于deepin上運行Qt開發的程序

國產化替代是將來各單位的主流趨勢&#xff0c;探索自行開發應用程序在國產操作系統上正常運行是將來的主要工作之一。本文淺嘗gui程序在統信社區版——deepin上遇到的小問題。 使用Qt在deepin上做了一個類似gif的幀動畫彈窗&#xff0c;在編譯運行時&#xff0c;程序可以正常…

Unity自學之旅05

Unity自學之旅05 Unity學習之旅⑤&#x1f4dd; AI基礎與敵人行為&#x1f94a; AI導航理論知識&#xff08;基礎&#xff09;開始實踐 &#x1f383; 敵人游戲機制追蹤玩家攻擊玩家子彈碰撞完善游戲失敗條件 &#x1f917; 總結歸納 Unity學習之旅⑤ &#x1f4dd; AI基礎與敵…

我想通過python語言,學習數據結構和算法該如何入手?

學習數據結構和算法是編程中的重要基礎&#xff0c;Python 是一個非常適合入門的語言。以下是學習數據結構和算法的步驟和建議&#xff1a; 1. 掌握 Python 基礎 確保你對 Python 的基本語法、數據類型、控制結構&#xff08;如循環、條件語句&#xff09;、函數等有扎實的理…

淺談Unity中Canvas的三種渲染模式

Overview UGUI通過 Canvas 組件渲染和管理UI元素。Canvas 是 UI 元素的容器&#xff0c;它決定了 UI 元素的渲染方式以及它們在屏幕上的顯示效果。Canvas 有三種主要的渲染模式&#xff0c;每種模式有不同的用途和特點。本文將介紹這三種渲染模式 1. Screen Space - Overlay 模…

Unity中在UI上畫線

在UI中畫一條曲線 我封裝了一個組件,可以實現基本的畫線需求. 效果 按住鼠標左鍵隨手一畫. 用起來也很簡單,將組件掛到空物體上就行了,紅色的背景是Panel. 你可以將該組件理解為一個Image,只不過形狀更靈活一些罷了,所以它要放在下面的層級(不然可能會被擋住). 代碼 可以…

2024.1.22 安全周報

政策/標準/指南最新動態 01 工信部印發《關于加強互聯網數據中心客戶數據安全保護的通知》 原文: https://www.secrss.com/articles/74673 互聯網數據中心作為新一代信息基礎設施&#xff0c;承載著千行百業的海量客戶數據&#xff0c;是關系國民經濟命脈的重要戰略資源。…

探索 LLM:從基礎原理到 RAG 實現的深度解析

一.LLM基礎知識 1.1 大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09; 他是模型&#xff0c;是 AI 能力的核心。他是語言模型&#xff0c;其核心能力在于語言能力。他是大語言模型&#xff0c;與傳統模型相比&#xff0c;它最大的特點就是“大”。 1…