版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
軟件架構(gòu)設(shè)計實戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第3章認(rèn)識軟件架構(gòu)123軟件架構(gòu)概述感受身邊的架構(gòu)存在軟件架構(gòu)的表示4軟件架構(gòu)的作用5常見的軟件架構(gòu)模式6軟件架構(gòu)與軟件框架軟件架構(gòu)概述軟件架構(gòu)描述的是一個系統(tǒng)應(yīng)該怎么構(gòu)建,是針對特定的軟件系統(tǒng)進(jìn)行的一種抽象,能夠為大型軟件系統(tǒng)的設(shè)計、實現(xiàn)提供相應(yīng)的指導(dǎo),是相對而言比較具體的;而軟件體系結(jié)構(gòu)是比較寬泛的,當(dāng)然也是對軟件項目設(shè)計的整體描述,但是面對的抽象層次更高一些。1軟件架構(gòu)概述隨著軟件規(guī)模的不斷擴(kuò)大和軟件復(fù)雜性的不斷提高,使軟件系統(tǒng)架構(gòu)的復(fù)雜性逐步攀升,直接導(dǎo)致了軟件實現(xiàn)、軟件維護(hù)、軟件服務(wù)、軟件項目管理等也越來越困難?,F(xiàn)代軟件工程的核心,正在軟件架構(gòu)領(lǐng)域,以軟件架構(gòu)和軟件構(gòu)件為核心的軟件開發(fā)方法,使軟件生產(chǎn)走向工業(yè)化和自動化,極大的提高了軟件開發(fā)的生產(chǎn)效率。11.1軟件架構(gòu)產(chǎn)生的背景隨著組件化軟件開發(fā)方式的發(fā)展,如何在設(shè)計階段對軟件系統(tǒng)進(jìn)行抽象,獲取系統(tǒng)藍(lán)圖以支持系統(tǒng)開發(fā)中的決策成為迫切而現(xiàn)實的問題。主要包括以下3個方面:1.軟件復(fù)雜、易變,其行為特性難以預(yù)見,軟件開發(fā)過程中需求和設(shè)計之間缺乏有效的轉(zhuǎn)換,導(dǎo)致軟件開發(fā)過程困難和不可控。2.隨著軟件系統(tǒng)規(guī)模越來越大,整個系統(tǒng)的結(jié)構(gòu)和規(guī)格說明顯得越來越重要。同時軟件的各個模塊之間有各種顯性或隱性的依賴關(guān)系,隨著系統(tǒng)的成長和模塊的增多,這些關(guān)系的數(shù)量往往以幾何級數(shù)的速度增長。3.對于大規(guī)模的復(fù)雜軟件系統(tǒng),相較于對計算算法和數(shù)據(jù)結(jié)構(gòu)的選擇,總體的系統(tǒng)結(jié)構(gòu)設(shè)計和規(guī)格說明已經(jīng)變得更加重要了。1.1軟件架構(gòu)產(chǎn)生的背景20世紀(jì)90年代,研究人員展開了關(guān)于軟件架構(gòu)的基礎(chǔ)研究,主要集中于架構(gòu)風(fēng)格(模式)、架構(gòu)描述語言、架構(gòu)文檔和形式化方法等方面。軟件架構(gòu)在高層次上對軟件進(jìn)行描述,便于軟件開發(fā)過程中各個視角(如:用戶、業(yè)務(wù)和系統(tǒng))的統(tǒng)一,能夠及早發(fā)現(xiàn)開發(fā)中的問題并支持各種解決方案的評估和預(yù)測。1.1軟件架構(gòu)產(chǎn)生的背景在軟件項目生命周期的各個階段都需要使用到軟件架構(gòu)。在需求分析階段,需要使用軟件架構(gòu)模式(風(fēng)格)對軟件規(guī)約進(jìn)行完善,支持從需求模型向架構(gòu)模型轉(zhuǎn)換;在軟件設(shè)計階段,通過軟件架構(gòu)借助形式化或多角度抽象描述,建立系統(tǒng)的架構(gòu)模型、功能模型等,為進(jìn)一步細(xì)化奠定基礎(chǔ);在軟件項目的實現(xiàn)和維護(hù)階段,軟件架構(gòu)能夠幫助實現(xiàn)和維護(hù)人員理解軟件項目的整體結(jié)構(gòu)、功能劃分等,更好的實現(xiàn)項目功能,盡早的發(fā)現(xiàn)和修復(fù)問題。因此良好的軟件架構(gòu)設(shè)計是軟件項目得以順利實現(xiàn)的重要保障。1.2軟件架構(gòu)的定義軟件架構(gòu)是由結(jié)構(gòu)和功能各異、相互作用的構(gòu)件集合,按照一定的結(jié)構(gòu)方式構(gòu)成的系統(tǒng)。它包含系統(tǒng)的基礎(chǔ)構(gòu)成單元,它們之間的作用關(guān)系,在構(gòu)成系統(tǒng)時它們的集成方法以及對集成約束的描述等。1.2軟件架構(gòu)的定義從軟件系統(tǒng)的角度理解架構(gòu)定義,可以看到:軟件架構(gòu)是關(guān)于軟件系統(tǒng)如何被組織起來的定義,即軟件系統(tǒng)是由以下三個要素構(gòu)成的。1.組成系統(tǒng)的結(jié)構(gòu)元素或構(gòu)件2.構(gòu)件與構(gòu)件之間的連接以及特定的連接關(guān)系3.系統(tǒng)集成的方法和約束1.2軟件架構(gòu)的定義為了便于理解架構(gòu),不妨將軟件構(gòu)架的定義濃縮為以下三個要素:(1)組成架構(gòu)的元素:構(gòu)件。(2)構(gòu)件的相互聯(lián)系:連接。(3)構(gòu)件之間的相互聯(lián)系關(guān)系:連接關(guān)系。架構(gòu)是一個或多個結(jié)構(gòu)(子架構(gòu)、可不斷細(xì)分)的抽象,是由抽象的構(gòu)件來表示的,構(gòu)件之間相互具有聯(lián)系,相互之間的聯(lián)系具有某些行為特征(連接關(guān)系)。1.3軟件架構(gòu)的應(yīng)用軟件架構(gòu)是軟件生命周期中的重要產(chǎn)物,它影響軟件開發(fā)的各個階段。需求階段設(shè)計階段實現(xiàn)階段維護(hù)階段1.4軟件架構(gòu)的一般特性軟件架構(gòu)能夠服務(wù)于軟件項目生命周期的全過程,主要具有以下5個方面的特性。1.注重可重用性2.利益相關(guān)者較多3.關(guān)注點分離4.質(zhì)量驅(qū)動5.概念完整性感受身邊的架構(gòu)存在在我們的身邊有很多架構(gòu)的存在,我們也能時刻感受架構(gòu)的作用,例如人體的骨骼結(jié)構(gòu),正是由于頸椎骨骼的存在才能支撐我們抬頭、搖頭;一條魚能夠在水中快速的游動,也借助的是全身骨骼的支撐;一所高校能夠維持正常的運行,也依賴的是學(xué)校的組織架構(gòu)(結(jié)構(gòu))。22.1交通信號燈控制系統(tǒng)的架構(gòu)構(gòu)件(實體部分):電源、信號燈、電線、開關(guān);構(gòu)件的相互聯(lián)系(連接):連接電路使信號燈能夠點亮與熄滅;構(gòu)件之間的關(guān)系(邏輯關(guān)系):亮燈的順序、時長以及循環(huán)等。2.2智能手機充電接口的架構(gòu)主要的構(gòu)件(實體部分)包括:電線、接口、智能手機、PC機(或其他設(shè)備);構(gòu)件的相互聯(lián)系(連接):智能手機與PC機(這里以PC機為例)通過USB連接;構(gòu)件之間的關(guān)系(邏輯關(guān)系):PC、智能手機支持USBType-C協(xié)議,并遵守該協(xié)議進(jìn)行數(shù)據(jù)傳遞。軟件架構(gòu)的表示軟件架構(gòu)最主要的功能就是描述系統(tǒng)將如何實現(xiàn)指派給它的軟件功能,這個描述就是架構(gòu)視圖。33.1軟件架構(gòu)的描述手機應(yīng)用的界面設(shè)計草圖架構(gòu)視圖是對于從某一視角或某一點上看到的系統(tǒng)所做的簡化描述,它涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關(guān)的實體。3.2基于UML軟件架構(gòu)視圖軟件架構(gòu)是軟件開發(fā)的基礎(chǔ),也是產(chǎn)品迭代的紐帶,通過架構(gòu)能夠理解軟件設(shè)計的思路和目標(biāo)。UML架構(gòu)視圖及其作用3.2基于UML軟件架構(gòu)視圖1.邏輯視圖3.2基于UML軟件架構(gòu)視圖2.開發(fā)視圖3.2基于UML軟件架構(gòu)視圖3.進(jìn)程視圖3.2基于UML軟件架構(gòu)視圖4.物理視圖3.2基于UML軟件架構(gòu)視圖5.場景視圖場景視圖,一般是用來描述需求的,從某種意義上來講,是最重要的需求抽象,該視圖是其他視圖的冗余,同時其他視圖也都要與場景視圖發(fā)生交互。軟件架構(gòu)的作用軟件架構(gòu)在軟件項目的開發(fā)過程中主要具有以下四個方面的作用。1.作為溝通媒介2.為系統(tǒng)的功能實現(xiàn)提供支撐和約束3.是軟件過程管理的基礎(chǔ)4.是軟件迭代開發(fā)的框架4常見的軟件架構(gòu)模式架構(gòu)模式是一個通用的解決方案,用于解決在給定上下文中的軟件體系結(jié)構(gòu)中經(jīng)常出現(xiàn)的問題。架構(gòu)模式與軟件設(shè)計模式類似,但具有更廣泛的應(yīng)用范圍。這里簡要介紹5種常用的軟件架構(gòu)模式,請讀者注意體會與軟件設(shè)計模式的區(qū)別,并在后面框架篇中結(jié)合具體的Spring、SpringMVC、MyBatis框架進(jìn)行深入理解。55.1分層模式分成模式是一種最為常見的架構(gòu)模式,也稱為多層體系架構(gòu)模式。它用來構(gòu)造可以分解為子任務(wù)組的軟件系統(tǒng),每個子任務(wù)都處于一個特定的抽象級別。每個層都為上一層提供支撐服務(wù),并依賴于下一層的服務(wù)。5.2客戶端-服務(wù)器模式客戶端-服務(wù)器(Client/Server,簡稱C/S)模式由兩部分組成:一個服務(wù)器和多個客戶端。服務(wù)器組件將為多個客戶端組件提供服務(wù),客戶端從服務(wù)器請求服務(wù),服務(wù)器為這些客戶端提供相關(guān)服務(wù)5.3瀏覽器-服務(wù)器模式瀏覽器-服務(wù)器模型(Brower-Server,簡稱B/S)是一種對C/S模型的演變和改進(jìn),在這種模型中,用戶界面完全通過WEB瀏覽器實現(xiàn),一部分事務(wù)邏輯由瀏覽器實現(xiàn),大部分事務(wù)邏輯在服務(wù)器中實現(xiàn),它是一種特殊的客戶端-服務(wù)器模型,這種模型的客戶端是某種瀏覽器,采用HTTP協(xié)議通信。5.4管道過濾器模式管道-過濾器模式是一種面向數(shù)據(jù)流的軟件架構(gòu),主要由管道和過濾器組成,過濾器為一個具體的處理模塊,接受輸入數(shù)據(jù)然后進(jìn)行一定的處理,最后進(jìn)行輸出;管道是傳輸數(shù)據(jù)的組件,用于將數(shù)據(jù)從一個過濾器的輸出接口傳送到下一個過濾器的輸入接口。5.5微服務(wù)模式微服務(wù)架構(gòu)指的是將大型復(fù)雜系統(tǒng)按功能或者業(yè)務(wù)需求,垂直切分成更小的子系統(tǒng),這些子系統(tǒng)以獨立部署的子服務(wù)存在,它們之間通過輕量級的、跨語言的同步或者異步(消息)網(wǎng)絡(luò)調(diào)用進(jìn)行通信。5.5微服務(wù)模式每個微服務(wù)僅關(guān)注于完成一個業(yè)務(wù)域的事情,微服務(wù)模式特點:1.系統(tǒng)是由多個服務(wù)構(gòu)成;2.每個服務(wù)可以獨立部署;3.每個服務(wù)之間是松耦合的,服務(wù)內(nèi)部是高內(nèi)聚的。5.5微服務(wù)模式微服務(wù)模式的主要優(yōu)點為:1.使大型的復(fù)雜應(yīng)用程序可以持續(xù)交付和持續(xù)部署。2.每個服務(wù)都相對較小并容易維護(hù)。3.服務(wù)可以獨立部署和獨立擴(kuò)展,系統(tǒng)迭代容易。4.微服務(wù)架構(gòu)可以實現(xiàn)團(tuán)隊的自治,團(tuán)隊協(xié)作容易,每個服務(wù)團(tuán)隊可以獨立于其他團(tuán)隊開發(fā)、部署和擴(kuò)展。開發(fā)速度相對單體應(yīng)用更快。5.每個微服務(wù)都可以有獨立的存儲和服務(wù)器,從而整個系統(tǒng)的吞吐能力更強。5.5微服務(wù)模式微服務(wù)模式的主要缺點為:1.運維成本過高,部署數(shù)量較多,需要協(xié)調(diào)更多的開發(fā)團(tuán)隊;2.接口需要與多個微服務(wù)對接,因此需要兼容多版本;3.分布式系統(tǒng)帶來更高的復(fù)雜性,需要處理分布式事務(wù),需要有更好的發(fā)布平臺和分布式跟蹤平臺等。軟件架構(gòu)與軟件框架軟件框架要從兩個方面來理解:一方面它是一個框——指其約束,即在特定領(lǐng)域內(nèi)使用該框架應(yīng)該遵守的規(guī)則和規(guī)范;另一方面它是一個架——指其支撐性,即在特定領(lǐng)域內(nèi)對系統(tǒng)功能實現(xiàn)的基礎(chǔ)性支撐。6軟件架構(gòu)與軟件框架軟件架構(gòu)是一個系統(tǒng)的草圖,軟件架構(gòu)描述的對象是直接構(gòu)成系統(tǒng)的抽象組件。各個組件之間的連接則明確和相對細(xì)致地描述組件之間的通訊。在實現(xiàn)階段,這些抽象組件被細(xì)化為實際的組件,比如具體某個類或者對象。在面向?qū)ο箢I(lǐng)域中,組件之間的連接通常用接口來實現(xiàn)。框架就是可復(fù)用的代碼,而架構(gòu)不是,它是關(guān)于軟件如何設(shè)計的策略。引入軟件架構(gòu)之后,整個開發(fā)過程變成了“兩步走”,先做架構(gòu)設(shè)計,再進(jìn)行框架開發(fā),架構(gòu)決策會體現(xiàn)在框架開發(fā)之中。6軟件架構(gòu)與軟件框架框架和架構(gòu)的出現(xiàn),都是為了解決軟件系統(tǒng)日益復(fù)雜所帶來的困難而采取“分而治之”策略,先大局后局部,就出現(xiàn)了架構(gòu),先通用后專用,就出現(xiàn)了框架。下圖就描述了軟件架構(gòu)與軟件框架的關(guān)系,架構(gòu)是抽象解決方案,關(guān)注大局而忽略細(xì)節(jié),而框架是通用半成品,關(guān)注于細(xì)節(jié),但是還必須根據(jù)具體需求進(jìn)一步定制開發(fā)才能成為應(yīng)用系統(tǒng)。6軟件架構(gòu)與軟件框架在軟件架構(gòu)與軟件框架的關(guān)系中,起點為特定領(lǐng)域的復(fù)雜軟件工程問題(一般指待開發(fā)的軟件系統(tǒng)),先進(jìn)行抽象,提取軟件系統(tǒng)要解決主要問題,形成軟件架構(gòu),即軟件系統(tǒng)的抽象解決方案,在這里忽略軟件系統(tǒng)實現(xiàn)的細(xì)節(jié)問題;由于特定領(lǐng)域軟件系統(tǒng)的共性問題,可以抽取出其共性問題的解決方案,這里指軟件代碼,例如在WEB應(yīng)用中都涉及到數(shù)據(jù)類型的轉(zhuǎn)換、數(shù)據(jù)校驗等,可以剝離軟件系統(tǒng)中的特定業(yè)務(wù)邏輯,形成具有較好通用性的軟件代碼,這就是軟件框架,基于框架的軟件開發(fā)可以減少后繼軟件開發(fā)的工作量;把軟件架構(gòu)和軟件框架有效結(jié)合,能夠充分發(fā)揮兩者的優(yōu)勢,通過框架能夠更好的理解架構(gòu)的設(shè)計意圖,通過架構(gòu)能夠更好的理解框架的基礎(chǔ)支撐。6課程思政我國的根本政治制度是人民民主專政,是在中國共產(chǎn)黨的領(lǐng)導(dǎo)下,以工農(nóng)聯(lián)盟為基礎(chǔ),實行人民民主和人民專政的國家政權(quán)。我國最高國家權(quán)力機關(guān)是中華人民共和國全國人民代表大會,它的常設(shè)機關(guān)是全國人民代表大會常務(wù)委員會。我國的最高國家行政機關(guān)是中華人民共和國國務(wù)院,也是最高國家權(quán)利機關(guān)的執(zhí)行機關(guān),下設(shè)外交部、國防部、教育部等組成部門。在我國這種總體架構(gòu)的設(shè)計下,我們?nèi)娼ǔ闪诵】瞪鐣瑢崿F(xiàn)了民族進(jìn)步和國家富強。在習(xí)近平新時代中國特色社會主義思想指導(dǎo)下,中國共產(chǎn)黨領(lǐng)導(dǎo)全國各族人民,邁上全面建設(shè)社會主義現(xiàn)代化國家新征程、向著第二個百年奮斗目標(biāo)勝利進(jìn)軍。7習(xí)題
1.根據(jù)本章的架構(gòu)實例和軟件架構(gòu)的定義,用自己的話描述一下什么是軟件架構(gòu)。
2.查閱資料了解一下軟件架構(gòu)的定義,比較一下它們之間的差別。
3.還有哪些常用的軟件架構(gòu)模式,它們的優(yōu)缺點是什么。
4.試分析比較C/S架構(gòu)和B/S架構(gòu)各自的優(yōu)缺點。
5.試比較分析一下軟件設(shè)計模式、軟件架構(gòu)模式的聯(lián)系與區(qū)別?;赟SM框架的軟件架構(gòu)設(shè)計實戰(zhàn)Software
Architecture
Design
Practice
Based
on
SSM
Framework第4章Spring框架基礎(chǔ)123Java企業(yè)級開發(fā)概述Spring框架概述Spring開發(fā)環(huán)境搭建Java企業(yè)級開發(fā)概述企業(yè)級應(yīng)用:一般指那些為商業(yè)組織、企業(yè)、政府機關(guān)等大型組織機構(gòu)創(chuàng)建并部署的解決方案及應(yīng)用特點:以信息的存儲、流轉(zhuǎn)、處理為核心。結(jié)構(gòu)復(fù)雜,涉及的外部資源眾多、事務(wù)密集、數(shù)據(jù)量大、用戶數(shù)多,對安全性和穩(wěn)定性的要求較高。重點圍繞相對固定的業(yè)務(wù)工作流運轉(zhuǎn),一般來說,大型組織機構(gòu)的業(yè)務(wù)流程在短時間內(nèi)不會出現(xiàn)巨大的變動,因此,企業(yè)級應(yīng)用的需求變化多表現(xiàn)為漸進(jìn)式。用戶群體相對固定,具備相關(guān)領(lǐng)域知識,技能素質(zhì)較高。Java企業(yè)級開發(fā)概述Java企業(yè)級開發(fā):1998年,J2EE(Java
2企業(yè)版)推出2005年,J2EE更名為JavaEE2020年,JavaEE更名為JakartaEE最新版:2022年發(fā)布的Jakarta10,包含20多個子項目Spring框架概述一種輕量級Java企業(yè)級應(yīng)用開發(fā)框架發(fā)展史提出者:Rod
Johnson<<J2EE
Design
And
Development>>(2002)<<J2EE
Development
Without
EJB>>(2004)
interface21interface21Spring
1.0
(2004)Spring框架概述優(yōu)勢:方便解耦,簡化開發(fā)。通過Spring提供的控制反轉(zhuǎn)功能,可以將各個對象的創(chuàng)建和屬性注入完全交給Spring管理,降低了系統(tǒng)模塊間的耦合程度,便于實現(xiàn)面向抽象編程,有利于構(gòu)建出體系結(jié)構(gòu)優(yōu)良的應(yīng)用程序。面向切面編程支持。通過Spring提供的面向切面編程功能,使開發(fā)人員更能專注于業(yè)務(wù)邏輯,很多不容易用傳統(tǒng)面向?qū)ο笏枷雽崿F(xiàn)的功能可以較容易地通過面向切面編程思想實現(xiàn)。比如,基于面向切面編程,Spring提供了聲明式事務(wù)支持,使開發(fā)人員從單調(diào)繁瑣的事務(wù)管理代碼中解脫出來,提高了開發(fā)效率和質(zhì)量。功能豐富,一站式開發(fā)。除Spring自己實現(xiàn)的功能外,Spring還對很多當(dāng)時比較晦澀難用的J2EEAPI進(jìn)行了封裝,如JDBC、JavaMail、遠(yuǎn)程調(diào)用等,使這些API的使用難度降低,通過這些方式,Spring提供了企業(yè)級開發(fā)可能涉及的多種技術(shù),如數(shù)據(jù)訪問相關(guān)技術(shù)、Web相關(guān)技術(shù)、測試等等。Spring框架概述主要組成部分(Spring
Framework)Core
ContainerData
Access/IntegrationWebAOPTestSpring框架概述建立在Spring
Framework基礎(chǔ)上的其它項目Spring
BootSpring
DataSpring
CloudSpring
SecuritySpring
REST
DocsSpring
Web
ServicesSpring框架概述獲取Spring框架方式一:獲取源碼方式二:下載jar包https://repo.spring.io/ui/,左側(cè)選擇“Artifacts”,然后依次展開:libs-release-local、org、springframework、spring,找到需要的版本,點擊spring-x.x.x-dist.zip即可下載/spring-projects/方式三:自動構(gòu)建工具M(jìn)aven、GradleSpring開發(fā)環(huán)境搭建步驟:安裝JDK安裝IntelliJ
IDEA安裝和配置Maven創(chuàng)建Maven應(yīng)用程序Spring開發(fā)環(huán)境搭建在Maven配置文件pom.xml的根標(biāo)簽中添加<dependencies></dependencies>標(biāo)簽,并在其中添加如下代碼:Spring開發(fā)環(huán)境搭建在項目的src/main/resources路徑下新建beans.xml文件,作為Spring的配置文件,內(nèi)容如下:Spring開發(fā)環(huán)境搭建編寫測試代碼。在項目的src/main/java路徑下新建Main.java文件,輸入以下代碼:Q&A
Time基于SSM框架的軟件架構(gòu)設(shè)計實戰(zhàn)Software
Architecture
Design
Practice
Based
on
SSM
Framework第5章Spring的IoC機制1234IoC的概念基于XML的配置基于注解的配置基于Java類的配置IoC的概念I(lǐng)oC的概念所謂控制反轉(zhuǎn)是指將某一接口(或類)的具體實現(xiàn)類(或子類)的選擇權(quán)從調(diào)用者手中移除,轉(zhuǎn)交給第三方,使得程序中所有對象的創(chuàng)建過程都由第三方統(tǒng)一管理,當(dāng)代碼中需要使用某一類的對象時,只需要從第三方直接獲取即可。IoC并不是一種特定的技術(shù),而是一種設(shè)計思想,其主要目的就是接管系統(tǒng)中各個對象的創(chuàng)建過程,使產(chǎn)生依賴關(guān)系的兩個對象之間擺脫依賴關(guān)系,達(dá)到模塊間解耦的目的。IoC的概念控制反轉(zhuǎn)和工廠模式IoC是一種程序設(shè)計思想,而不是一種特定的技術(shù),工廠模式是一種設(shè)計模式,是在長期的軟件設(shè)計工作中總結(jié)出來的用于解決軟件設(shè)計問題的模式,它是針對對象創(chuàng)建問題提出的一種具體解決方案。通過工廠模式,可以實現(xiàn)IoC這種思想,因此可以說,工廠模式是實現(xiàn)控制反轉(zhuǎn)的一種方式。IoC的概念控制反轉(zhuǎn)和依賴注入應(yīng)用IoC思想后,對象的創(chuàng)建過程雖然不需要調(diào)用者進(jìn)行管理,但對象的各個成員的初始化還是需要調(diào)用者負(fù)責(zé),而依賴注入(DependencyInjection,DI)指的就是將對象的內(nèi)各個成員的初始化和賦值工作也交給第三方,不需要開發(fā)人員手動管理。因此,可以說控制反轉(zhuǎn)和依賴注入所表達(dá)的是同一種軟件設(shè)計思想。IoC的概念Spring中的控制反轉(zhuǎn)在Spring中,將程序中要使用的各個對象稱為Bean,而對象(也就是Bean)的管理者稱為容器(Container),SpringIoC包括以下組成部分:1.資源描述組件2.資源加載組件3.Bean描述組件4.Bean構(gòu)造組件5.容器組件6.Bean注冊組件應(yīng)用程序XML注解Java類Bean配置信息Spring容器Bean實現(xiàn)類Class1Class2……Bean定義注冊表Bean緩存池1.讀取Bean配置信息2.根據(jù)Bean注冊表實例化Bean3.將Bean實例放到緩存池中4.使用BeanIoC的概念Spring中的控制反轉(zhuǎn)SpringIoC容器首先讀取Bean的配置信息,這些配置信息可能來自于XML配置文件、代碼注解或Java類,而后根據(jù)Bean的配置信息對Bean進(jìn)行裝配,并將裝配好的Bean存入容器的Bean緩存池中,應(yīng)用程序使用Bean時,只需從容器中獲取即可。在Spring的當(dāng)前版本中,支持三種配置方式,分別為:基于XML的配置基于注解的配置基于Java類的配置基于XML的配置基于XML的配置——Bean的實例化實例化Bean的三種方法默認(rèn)構(gòu)造函數(shù)靜態(tài)工廠實例工廠方法1:使用默認(rèn)構(gòu)造函數(shù)前提:Bean的實現(xiàn)類必須有默認(rèn)構(gòu)造函數(shù)基于XML的配置——Bean的實例化配置文件:基于XML的配置——Bean的實例化測試代碼:方法2:使用靜態(tài)工廠前提:工廠類中要有靜態(tài)生產(chǎn)方法基于XML的配置——Bean的實例化工廠類:基于XML的配置——Bean的實例化配置文件:方法3:使用實例工廠前提:工廠類中要有非靜態(tài)生產(chǎn)方法基于XML的配置——Bean的實例化工廠類:基于XML的配置——Bean的實例化配置文件:基于XML的配置——Bean的生命周期與Bean的生命周期有關(guān)的配置設(shè)置Bean的作用范圍(scope屬性)延遲初始化(lazy-init和default-lazy-init屬性)初始化方法和銷毀方法(init-method和destroy-method屬性)設(shè)置Bean的作用范圍(scope屬性)基于XML的配置——Bean的生命周期配置文件:基于XML的配置——Bean的生命周期scope屬性的可選值singleton(默認(rèn)):在容器初始化時創(chuàng)建Bean,每次取到的是同一實例prototype:在每次獲取時創(chuàng)建Bean,每次取到的是新的實例request:每次HTTP連接創(chuàng)建一個新的Bean實例session:同一個Session共享一個Bean實例application:同一個Application共享一個Bean實例websocket:每次websocket連接創(chuàng)建一個新的Bean實例延遲初始化(lazy-init和default-lazy-init屬性)作用:在Bean的作用范圍為singleton時,第一次獲取Bean時創(chuàng)建實例只有當(dāng)scope屬性為singleton時這兩個屬性才有效基于XML的配置——Bean的生命周期配置文件:或:Bean的初始化和銷毀方法(init-method和destroy-method屬性)作用:配置在Bean創(chuàng)建完成和銷毀之前需要調(diào)用的方法注意:要想讓銷毀方法被調(diào)用,需要關(guān)閉容器基于XML的配置——Bean的生命周期配置文件:基于XML的配置——基于setter的屬性注入原理:基于Java的反射機制,間接調(diào)用Bean的實現(xiàn)類的set方法,實現(xiàn)屬性注入前提:需要注入的成員要定義setter基于XML的配置——基于setter的屬性注入字面值的setter注入字面值:基本數(shù)據(jù)類型+String方法:使用<property>和<value>標(biāo)簽或<property>標(biāo)簽的value屬性基于XML的配置——基于setter的屬性注入配置文件:基于XML的配置——基于setter的屬性注入也可以使用<bean>標(biāo)簽的value屬性:基于XML的配置——基于setter的屬性注入字面值setter注入注意事項:使用<value></value>標(biāo)簽,或使用<property>標(biāo)簽的value屬性注意數(shù)據(jù)類型對象類型的setter注入方法1:引用其它Bean使用<ref>標(biāo)簽或<property>標(biāo)簽的ref屬性基于XML的配置——基于setter的屬性注入基于XML的配置——基于setter的屬性注入配置文件:或:對象類型的setter注入方法2:內(nèi)部Bean在<property>標(biāo)簽內(nèi)部使用<bean>標(biāo)簽定義內(nèi)部Bean基于XML的配置——基于setter的屬性注入配置文件:對象類型的setter注入方式3:級聯(lián)屬性基于XML的配置——基于setter的屬性注入配置文件:基于XML的配置——基于setter的屬性注入對象類型setter注入注意事項三種方式:引用其它Bean,定義內(nèi)部Bean、使用級聯(lián)屬性null值:使用<null/>標(biāo)簽集合類型的屬性注入:List類型使用<list>標(biāo)簽基于XML的配置——基于setter的屬性注入配置文件:集合類型的屬性注入:Set類型使用<set>標(biāo)簽基于XML的配置——基于setter的屬性注入配置文件:集合類型的屬性注入:Map類型使用<map>標(biāo)簽基于XML的配置——基于setter的屬性注入配置文件:基于XML的配置——基于setter的屬性注入集合類型的屬性注入:Map類型說明<entry>標(biāo)簽:代表一個元素<key>標(biāo)簽:代表鍵值是字面值,使用<value>標(biāo)簽,是對象類型,使用<ref>標(biāo)簽也可以使用<entry>的key屬性和value屬性(或key-ref屬性和value-ref屬性)基于XML的配置——基于構(gòu)造函數(shù)的屬性注入原理:基于Java的反射機制,間接調(diào)用Bean的實現(xiàn)類的帶參數(shù)構(gòu)造函數(shù),實現(xiàn)對其各屬性的賦值。前提:重載帶參數(shù)構(gòu)造函數(shù)主要問題:參數(shù)的對應(yīng)方法:使用<constructor-arg>標(biāo)簽按順序匹配參數(shù)(默認(rèn)方式)基于XML的配置——基于構(gòu)造函數(shù)的屬性注入按索引匹配參數(shù):使用<constructor-arg>的index屬性基于XML的配置——基于構(gòu)造函數(shù)的屬性注入按類型匹配參數(shù):使用<constructor-arg>的type屬性基于XML的配置——基于構(gòu)造函數(shù)的屬性注入按名稱匹配參數(shù):使用<constructor-arg>的name屬性基于XML的配置——基于構(gòu)造函數(shù)的屬性注入多種方式混合匹配參數(shù)基于XML的配置——基于構(gòu)造函數(shù)的屬性注入基于XML的配置——基于構(gòu)造函數(shù)的屬性注入注意事項構(gòu)造函數(shù)入?yún)⒁玫膶ο蟊仨殰?zhǔn)備就緒把<value>替換成<ref>就是對象類型的注入<value>標(biāo)簽也可以替換成<constructor-arg>的value屬性<ref>標(biāo)簽也可以替換成<constructor-arg>的ref屬性也可以在<constructor-arg>中定義內(nèi)部Bean把<value>替換成集合,就是集合類型的注入基于XML的配置——工廠方法注入原理在工廠方法中設(shè)置對象的屬性值,通過工廠方法實例化Bean以后,即完成了屬性的注入分類靜態(tài)工廠實例工廠基于XML的配置——工廠方法注入工廠類:基于XML的配置——工廠方法注入配置文件:基于XML的配置——p命名空間、c命名空間和util命名空間原理使用p命名空間注入時,將需要注入的屬性名作為<bean>標(biāo)簽的一個屬性,從而免于配置多個<property>子標(biāo)簽,起到簡化配置的作用。在使用前,需要在配置文件里聲明p命名空間p命名空間注入:字面值基于XML的配置——p命名空間、c命名空間和util命名空間p命名空間注入:對象類型util命名空間:允許我們定義一個集合,然后像引用Bean一樣引用這個集合在使用前,需要先聲明util命名空間基于XML的配置——p命名空間、c命名空間和util命名空間p命名空間注入:集合類型(結(jié)合util命名空間)基于XML的配置——p命名空間、c命名空間和util命名空間c命名空間:與基于p命名空間的注入類似,將需要注入的屬性名作為<bean>標(biāo)簽的一個屬性,起到簡化配置的作用。在使用前,需要先聲明c命名空間基于XML的配置——p命名空間、c命名空間和util命名空間c命名空間注入:字面值、對象類型和集合類型(結(jié)合util命名空間)基于XML的配置——p命名空間、c命名空間和util命名空間基于XML的配置——Bean之間的關(guān)系繼承涉及屬性:abstract、parent依賴涉及屬性:depends-on基于XML的配置——Bean之間的關(guān)系繼承如果多個Bean存在相同的配置信息,Spring允許我們定義一個父Bean,子Bean將自動繼承父Bean的配置信息。父Bean使用abstract=true屬性,它是抽象的,不能被實例化。子Bean使用parent屬性,指明其父Bean是誰。配置文件基于XML的配置——Bean之間的關(guān)系基于XML的配置——Bean之間的關(guān)系依賴使用<ref>標(biāo)簽和ref屬性定義的依賴Spring可以自動處理,保證被依賴的Bean先被實例化。有的時候Bean之間不存在引用關(guān)系,但需要指明它們創(chuàng)建的先后順序,這就需要顯式地配置Bean之間的依賴關(guān)系。配置Bean之間的依賴關(guān)系使用<bean>標(biāo)簽的屬性depends-on。配置文件基于XML的配置——Bean之間的關(guān)系基于注解的配置基于注解的配置原理掃描源代碼,遇到注解調(diào)用相應(yīng)的注解處理程序完成注入優(yōu)勢簡化配置局限具有侵入性使用前提聲明context命名空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人住宅租賃服務(wù)合同范本2篇
- 張家界航空工業(yè)職業(yè)技術(shù)學(xué)院《數(shù)字特效創(chuàng)新設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 運城職業(yè)技術(shù)大學(xué)《大學(xué)基礎(chǔ)讀寫3》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南醫(yī)藥健康職業(yè)學(xué)院《論語孟子》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度個人二手房買賣協(xié)議書范本:房屋產(chǎn)權(quán)轉(zhuǎn)移全程服務(wù)合同
- 積極開展消防安全常識測試與競賽活動
- 房地產(chǎn)銷售三板斧培訓(xùn)
- 2025年度個人公司股權(quán)托管服務(wù)合同4篇
- 民工勞務(wù)分包合同
- 2025年度個人自建公寓樓建設(shè)合同示范文本4篇
- 中國文化概論(第三版)全套課件
- 117-鋼結(jié)構(gòu)工程質(zhì)量常見問題與管控措施
- SHS5230三星指紋鎖中文說明書
- 諾和關(guān)懷俱樂部對外介紹
- 保定市縣級地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學(xué)六年級下冊全冊教案(含反思)
- 供方注冊指南-ZTE
- 真心英雄合唱歌詞
- 旅游感知形象研究綜述 論文
- 如何提高辦文辦會辦事能力
- GB_T 37494-2019 糧油機械 軋坯機(高清版)
評論
0/150
提交評論