在Spring 當中存在的八大模式

在Spring 當中存在的八大模式

文章目錄

  • 在Spring 當中存在的八大模式
  • 每博一文案
  • 1. 簡單工廠模式
  • 2. 工廠方法模式
  • 3. 單例模式
  • 4. 代理模式
  • 5. 裝飾器模式
  • 6. 觀察者模式
  • 7. 策略模式
  • 8. 模板方法模式
  • 最后:

每博一文案

我認為 “知世故而不世故” 才是真正意義上的成熟。回歸到小孩子的純真和本心,經過歲月的洗禮和自我掙扎,兜兜轉轉,最后回歸本我,找回初心。然而“初心是什么?”是小孩子的本性?是不畏懼他人眼光勇于做自己?是拋開世俗的觀念,兜兜轉轉繞回到原點的真實?還是和想愛的人在一起因為三觀而非其他?是不把他人的想法駕凌在自己之上,是回歸到本我?真正的勇敢,是在這現實的世界里,理性浪漫主義般的活著。理想主義的可愛會讓一個人不那么世俗化。而非世俗化就會顯得不世故,在一些人看來就是不成熟,于是就幼稚了。無論“幼稚”還是“成熟”,本質上都是每個人基于自己的個性特點和社會環境,所作出的選擇。它意味著你能承擔“幼稚”或“成熟”所帶來的風險與損失,也努力追求它所帶來的收益與快樂。如果我們承認,人和人與生俱來的不一樣。也承認,在一個發達的現代社會,我們可以以無數種方式去獲得成功。甚至,連成功的定義,都可以由自己決定。那么,我們的生命應該會活得自由、珍重,而更有質感一點點吧。

在 Spring 當中存在著如下23種設計模式當中的 八大模式

  1. 簡單工廠模式
  2. 工廠方法模式
  3. 單例模式
  4. 代理模式
  5. 裝飾器模式
  6. 觀察者模式
  7. 策略模式
  8. 模板方法模式

1. 簡單工廠模式

BeanFactory 的 getBean() 方法,通過唯一的標識來獲取 Bean 對象,就是典型的簡單工廠模式(靜態工廠模式) 。簡單工廠模式步屬于23種設計模式的任何一種.

想要進一步,學習工廠方法模式,大家可以移步至:?????? GoF之工廠模式-CSDN博客

2. 工廠方法模式

FactoryBean 是典型的工廠方法模式,在配置文件種通過 factory-method 屬性來指定工廠方法,該方法時一個實例方法。

想要進一步,學習工廠方法模式,大家可以移步至:?????? GoF之工廠模式-CSDN博客

3. 單例模式

Spring 用的是雙重判斷加鎖的單例模式,請看下面代碼:

在這里插入圖片描述

由于單例模式,涉及的篇幅過多,大家可以移步至:?????? 23種設計模式:單例設計模式(餓漢式 VS 懶漢式)_單件模式 餓漢式csdn-CSDN博客

4. 代理模式

Spring的 AOP 就是使用動態代理實現的。

想要進一步,更加深入的了解代理模式,大家可以移步至:?????? GoF之代理模式(靜態代理+動態代理(JDK動態代理+CGLIB動態代理帶有一步一步詳細步驟))-CSDN博客

5. 裝飾器模式

JavaSE中的IO流是非常典型的裝飾器模式。
Spring 中配置 DataSource 的時候,這些dataSource可能是各種不同類型的,比如不同的數據庫:Oracle、SQL Server、MySQL等,也可能是不同的數據源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。
這時,能否在盡可能少修改原有類代碼下的情況下,做到動態切換不同的數據源?此時就可以用到裝飾者模式。
Spring根據每次請求的不同,將dataSource屬性設置成不同的數據源,以到達切換數據源的目的。
Spring中類名中帶有:Decorator和Wrapper單詞的類,都是裝飾器模式。

6. 觀察者模式

定義對象間的一對多的關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并自動更新。Spring中觀察者模式一般用在listener的實現。
Spring中的事件編程模型就是觀察者模式的實現。

在Spring中定義了一個ApplicationListener接口,用來監聽Application的事件,Application其實就是ApplicationContext,ApplicationContext內置了幾個事件,其中比較容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent

7. 策略模式

策略模式是行為性模式,調用不同的方法,適應行為的變化,強調父類的調用子類的特性。

getHandler 是 HandlerMapping 接口中的唯一方法,用于根據請求找到匹配的處理器。

比如我們自己寫了 AccountDao 接口,然后這個接口下有不同的實現類:AccountDaoForMySQL,AccountDaoForOracle。對于service 來說不需要關心底層具體的實現,只需要面向 AccountDao 接口調用,底層可以靈活切換實現,這就是策略模式。

8. 模板方法模式

Spring 中的 JdbcTemplate 類就是一個模板類。

它就是一個模板方法設計模式的體現,在模板類的模板方法 execute() 中編寫核心算法,具體的實現步驟在子類中完成。想要進一步了解,模板方法模式,大家可以移步至:?????? 23種設計模式之 : 模板方法設計模式_模板實例的設計模式有哪些-CSDN博客

最后:

“在這個最后的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回復是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮斗。感謝你們,我們總會在某個時刻再次相遇。”

在這里插入圖片描述

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

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

相關文章

Micrometer中0.5 0.9 0.99三個百分位數詳解

Micrometer的Timer類中的publishPercentiles方法使用0.5, 0.95, 0.99這三個百分位數,是因為它們在性能監控和SLA(Service Level Agreement,服務等級協議)指標測量中具有特定的意義和普遍應用。 在系統性能監控領域,這…

【PPT密碼】PPT文件的兩種不可編輯情況

不知道大家有沒有遇到過,PPT文件無法編輯的情況,今天小編分享兩種ppt文件不可編輯的原因以及解決方法。 情況一 如果打開ppt文件之后,發現幻燈片某些地方或者每張幻燈片同一個地方,無法編輯,這可能是因為PPT中設置了…

Scala學習筆記6: 類

目錄 第六章 類1- 簡單類和無參方法2- 帶有getter和setter的屬性3- 只帶getter的屬性4- 對象私有化5- 輔助構造器6- 主構造器7- 嵌套類end 第六章 類 在Scala中, 類用于創建對象的藍圖; 類可以包含方法、值、變量、類型、對象和特質等成員; 類名應該以大寫字母開頭, 可以包含…

ISCC 2024 部分wp

文章目錄 一、Misc1、Number_is_the_key2、FunZip3、擂臺—— 重“隱”;4、RSA_KU5、時間刺客6、成語學習7、 精裝四合一8、鋼鐵俠在解密9、有人讓我給你帶個話10、Magic_Keyboard11、工業互聯網模擬仿真數據分析 二、Web1、還沒想好名字的塔防游戲2、代碼審計3、原…

又一個換臉工具-swapface

網址 https://www.swapface.org/ 看官網支持windows和mac m1,我下載了但是我沒安裝,因為我的硬盤真的遭不住了。 可以去別的地方搜搜介紹,聽說使用挺簡單的。 但是我感覺還是rope比較好,其實rope已經很快了,就是沒有gpu有點坑…

Python數據分析實驗四:數據分析綜合應用開發

目錄 一、實驗目的與要求二、主要實驗過程1、加載數據集2、數據預處理3、劃分數據集4、創建模型估計器5、模型擬合6、模型性能評估 三、主要程序清單和運行結果四、實驗體會 一、實驗目的與要求 1、目的: 綜合運用所學知識,選取有實際背景的應用問題進行…

【Python】【Scrapy 爬蟲】理解HTML和XPath

為了從網頁中抽取信息,必須對其結構有更多了解。我們快速瀏覽HTML、HTML的樹狀表示,以及在網頁上選取信息的一種方式XPath。 HTML、DOM樹表示以及XPath 互聯網是如何工作的? 當兩臺電腦需要通信的時候,你必須要連接他們&#xff…

Android Studio實現MQTT協議的連接

1添加依賴 在項目中找到下圖文件 打開文件 如下 plugins {alias(libs.plugins.android.application) }android {namespace "com.example.mqtt_04"compileSdk 34defaultConfig {applicationId "com.example.mqtt_04"minSdk 27targetSdk 34versionCo…

樹的層序遍歷,平衡二叉樹,以及反轉二叉樹

一、樹的層序遍歷 層序遍歷的實現: 1.依賴于隊列的數據結構 2.核心怎么實現: 1)創建一個隊列的容器對象。 2)判斷根節點是否為空,不為空則添加根節點到隊列中。 3)遍歷是一個循環性的工作,寫…

小紅書無限加群腳本無需ROOT【使用簡單無教程】

小紅書無限加群腳本無需ROOT,包含了對應的小紅書版本【使用簡單無教程】 鏈接:https://pan.baidu.com/s/1HkLhahmHDFMKvqCC3Q3haA?pwd6hzf 提取碼:6hzf

【Vue】computed 和 methods 的區別

概述 在使用時,computed 當做屬性使用,而 methods 則當做方法調用computed 可以具有 getter 和 setter,因此可以賦值,而 methods 不行computed 無法接收多個參數,而 methods 可以computed 具有緩存,而 met…

Stable Diffusion教程:從入門到精通

Stable Diffusion是一種基于深度學習的圖像生成技術,能夠生成高質量的圖像,廣泛應用于藝術創作、廣告設計和游戲開發等領域。本教程將詳細介紹Stable Diffusion的基礎知識、安裝和配置方法,以及如何使用它進行圖像生成。 1. 什么是Stable Di…

Python函數、類和方法

大家好,當涉及到編寫可維護、可擴展且易于測試的代碼時,Python提供了一些強大的工具和概念,其中包括函數、類和方法。這些是Python編程中的核心要素,可以幫助我們構建高效的測試框架和可靠的測試用例。 本文將探討Python中的函數、…

大語言模型的工程技巧(三)——分布式計算

相關說明 這篇文章的大部分內容參考自我的新書《解構大語言模型:從線性回歸到通用人工智能》,歡迎有興趣的讀者多多支持。 本文將討論如何利用多臺機器進行神經網絡的分布式訓練。利用多臺機器來加速大語言模型的訓練,是其獲得成功的重要原…

BUUCTF靶場[Web] [極客大挑戰 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生賽]Include

[web][極客大挑戰 2019]Havefun1 考點:前端、GET傳參 點開網址,發現是這個界面 點擊界面沒有回顯,老規矩查看源代碼,看到以下代碼 代碼主要意思為: 用get傳參,將所傳的參數給cat,如果catdog…

揭秘Spring Bean的生命脈搏:深度剖析構造方法的推斷藝術

1. 引言 在Spring框架中,Bean的生命周期是一個至關重要的概念。從Bean的創建、初始化到銷毀,每一個階段都承載著框架與用戶代碼的交互。而在Bean的創建階段,構造方法的推斷顯得尤為重要。本文將從源碼層面深入剖析Spring是如何推斷并選擇構造…

程序員做副業項目,別把事情復雜化

賺錢,別把簡單的事情復雜化 不要把簡單的事情復雜化。在大多數情況下,你并不需要一個應用程序、一個小程序、一個公眾號、一個微商城、編寫深度文章、建立一個社群,甚至不需要所謂的個人品牌、IP或運營技巧。 你只需要一個裝滿5000個&#…

Linux基礎(五):常用基本命令

從本節開始,我們正式進入Linux的學習,通過前面的了解,我們知道我們要以命令的形式使用操作系統(使用操作系統提供的各類命令,以獲得字符反饋的形式去使用操作系統。),因此,我們是很有…

python將多個音頻文件與一張圖片合成視頻

代碼中m4a可以換成mp3,圖片和音頻放同一目錄,圖片名image.jpg,多線程max_workers可以根據CPU核心數量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…

Linkis踩坑記錄

從WeDataSphere的docker鏡像中把代碼和配置拷貝到普通環境運行,結果linkis提交任務總是報錯: Failed to execute task TaskID_1_otJobI d_astJob_0_codeExec_0 org.apache.linkis.orchestrator.ecm.exception.ECMPluginErrorException: errCode: 12003 …