什么是基于spring框架的設(shè)計(jì)耕姊,基于spring框架的設(shè)計(jì)究竟有什么用呢呀袱?我們可以用基于spring框架的設(shè)計(jì)來(lái)做些什么呢?這是我今天要說(shuō)的內(nèi)容。
當(dāng)然闹丐,百度基于spring框架的設(shè)計(jì)會(huì)出現(xiàn)一大堆基于spring框架的設(shè)計(jì)的介紹针贬,以及IOC和AOP喊积。但是這些官方的語(yǔ)言椰拒,看書(shū)都有解釋?zhuān)P(guān)鍵是我不知道為什么要用基于spring的設(shè)計(jì),基于spring框架的設(shè)計(jì)和不用框架到底區(qū)別在哪罕伯,還有它到底是通過(guò)什么來(lái)表明我用的框架就是基于spring框架的設(shè)計(jì)的曲伊?
基于spring的設(shè)計(jì)很抽象,基于spring的設(shè)計(jì)是框架追他,框架的主要目的是什么呢?大概所有框架的目的都一樣吧邑狸,那就是簡(jiǎn)化開(kāi)發(fā)懈糯。而它存在的目的也是為了簡(jiǎn)化java開(kāi)發(fā)。
它是怎樣來(lái)簡(jiǎn)化開(kāi)發(fā)的呢推溃?讓我們看看基于spring的設(shè)計(jì)采取的關(guān)鍵策略昂利。
基于POJO的輕量級(jí)和最小侵入性編程;
通過(guò)依賴(lài)注入和面向接口實(shí)現(xiàn)松耦合铁坎;
基于切面和慣例進(jìn)行聲明式編程蜂奸;
通過(guò)切面和模板減少樣板式代碼。
這就是基于spring框架的設(shè)計(jì)的四種關(guān)鍵策略硬萍。我們下面詳細(xì)談?wù)劇?/p>
基于spring框架的設(shè)計(jì)的最小侵入性
基于spring的設(shè)計(jì)竭力避免因自身的API而弄亂你的應(yīng)用代碼扩所。 基于spring的設(shè)計(jì)不會(huì)強(qiáng)迫你實(shí)現(xiàn)基于spring的設(shè)計(jì)規(guī)范的接口或繼承基于spring的設(shè)計(jì)規(guī)范的類(lèi), 相反朴乖, 在基于基于spring的設(shè)計(jì)構(gòu)建的應(yīng)用中祖屏, 它的類(lèi)通常沒(méi)有任何痕跡表明你使用了基于spring的設(shè)計(jì)助赞。只能通過(guò)xml配置文件來(lái)看出基于spring的設(shè)計(jì)的思想。
最壞的場(chǎng)景是袁勺,一個(gè)類(lèi)或許會(huì)使用基于spring的設(shè)計(jì)注解雹食, 但它依舊是POJO。
那可能有人要問(wèn)了期丰,不侵入如何實(shí)現(xiàn)基于spring框架的設(shè)計(jì)強(qiáng)大的功能群叶,基于spring框架的設(shè)計(jì)不是很強(qiáng)大嗎?在這里我要說(shuō)明钝荡,基于spring框架的設(shè)計(jì)是很強(qiáng)大街立,但它的強(qiáng)大在于它的理念,它的思想埠通,而不是它實(shí)現(xiàn)了多強(qiáng)大的功能赎离。
當(dāng)然不侵入有不侵入的解決方法,在我的理解里它的解決方法也算是基于spring的設(shè)計(jì)的核心吧端辱!那就是配置文件或者注解梁剔。
讓我們來(lái)看一個(gè)javabean。它是一個(gè)普通的java類(lèi)掠手。
public class exampleBean(){
public String testPrint(){
System.out.println("===test===");}
}基于spring的設(shè)計(jì)的非入侵式就是不強(qiáng)制類(lèi)要實(shí)現(xiàn)基于spring的設(shè)計(jì)的任何接口或類(lèi)憾朴,沒(méi)有任何地方表明它是一個(gè)基于spring的設(shè)計(jì)組件狸捕。 意味著這個(gè)類(lèi)在基于spring的設(shè)計(jì)應(yīng)用和非基于spring的設(shè)計(jì)應(yīng)用中都可以發(fā)揮同樣的作用喷鸽。
那這個(gè)類(lèi)在不耦合的情況下是如何發(fā)揮作用的呢?這就要提到基于spring框架的設(shè)計(jì)的DI(依賴(lài)注入)了灸拍。
依賴(lài)注入
任何一個(gè)有實(shí)際意義的應(yīng)用都會(huì)由兩個(gè)或者更多的類(lèi)組成做祝,這些類(lèi)相互之間進(jìn)行協(xié)作來(lái)完成特定的業(yè)務(wù)邏輯鸡岗。按照傳統(tǒng)的做法,每個(gè)對(duì)象負(fù)責(zé)管理與自己相互協(xié)作的對(duì)象(即它所依賴(lài)的對(duì)象)的引用声登,這將會(huì)導(dǎo)致高度耦合和難以測(cè)試的代碼揣苏。而基于spring框架的設(shè)計(jì)利用依賴(lài)注入恰恰解決了這一難題。
耦合具有兩面性脯厨。一方面坑质,緊密耦合的代碼難以測(cè)試临梗、難以復(fù)用稼跳、難以理解,并且典型地表現(xiàn)出“打地鼠”式的bug特性 茫经。 另一方面萎津, 一定程度的耦合又是必須的——完全沒(méi)有耦合的代碼什么也做不了。 為了完成有實(shí)際意義的功能锉屈, 不同的類(lèi)必須以適當(dāng)?shù)姆绞竭M(jìn)行交互。 總而言之遂黍, 耦合是必須的俊嗽, 但應(yīng)當(dāng)被小心謹(jǐn)慎地管理。
public void DealData(){
public Data data;
public void setData(Data data){
this.data=data;
}
public void add(){
data.add();
}
}
如上圖芯咧,DealData類(lèi)和Data類(lèi)耦合了。
通過(guò)DI敬飒, 對(duì)象的依賴(lài)關(guān)系將由系統(tǒng)中負(fù)責(zé)協(xié)調(diào)各對(duì)象的第三方組件在創(chuàng)建對(duì)象的時(shí)候進(jìn)行設(shè)定芬位。 對(duì)象無(wú)需自行創(chuàng)建或管理它們的依賴(lài)關(guān)系。
應(yīng)用切面
DI能夠讓相互協(xié)作的軟件組件保持松散耦合英染,而面向切面編程(aspect-oriented programming被饿, AOP) 允許你把遍布應(yīng)用各處的功能分離出來(lái)形成可重用的組件。
面向切面編程往往被定義為促使軟件系統(tǒng)實(shí)現(xiàn)關(guān)注點(diǎn)的分離一項(xiàng)技術(shù)箭养。系統(tǒng)由許多不同的組件組成哥牍,每一個(gè)組件各負(fù)責(zé)一塊特定功能喝检。除了實(shí)現(xiàn)自身核心的功能之外撼泛,這些組件還經(jīng)常承擔(dān)著額外的職責(zé)。諸如日志损俭、事務(wù)管理和安全這樣的系統(tǒng)服務(wù)經(jīng)常融入到自身具有核心業(yè)務(wù)邏輯的組件中去潘酗,這些系統(tǒng)服務(wù)通常被稱(chēng)為橫切關(guān)注點(diǎn),因?yàn)樗鼈儠?huì)跨越系統(tǒng)的多個(gè)組件琐脏。
如果將這些關(guān)注點(diǎn)分散到多個(gè)組件中去缸兔,你的代碼將會(huì)帶來(lái)雙重的復(fù)雜性。
實(shí)現(xiàn)系統(tǒng)關(guān)注點(diǎn)功能的代碼將會(huì)重復(fù)出現(xiàn)在多個(gè)組件中昂拂。這意味著如果你要改變這些關(guān)注點(diǎn)的邏輯抛猖,必須修改各個(gè)模塊中的相關(guān)實(shí)現(xiàn)。
即使你把這些關(guān)注點(diǎn)抽象為一個(gè)獨(dú)立的模塊养交,其他模塊只是調(diào)用它的方法瓢宦,但方法的調(diào)用還是會(huì)重復(fù)出現(xiàn)在各個(gè)模塊中灰羽。
組件會(huì)因?yàn)槟切┡c自身核心業(yè)務(wù)無(wú)關(guān)的代碼而變得混亂。一個(gè)向地址簿增加地址條目的方法應(yīng)該只關(guān)注如何添加地址玫镐,而不應(yīng)該關(guān)注它是不是安全的或者是否需要支持事務(wù)
圖1.2展示了這種復(fù)雜性怠噪。 左邊的業(yè)務(wù)對(duì)象與系統(tǒng)級(jí)服務(wù)結(jié)合得過(guò)于緊密。 每個(gè)對(duì)象不但要知道它需要記日志矫夷、 進(jìn)行安全控制和參與事務(wù), 還要親自執(zhí)行這些服務(wù)双藕。
在整個(gè)系統(tǒng)內(nèi),關(guān)注點(diǎn)(例如日志和安全)的調(diào)用經(jīng)常散布到各個(gè)模塊中扣泊,而這些關(guān)注點(diǎn)并不是模塊的核心業(yè)務(wù)
AOP能夠使這些服務(wù)模塊化嘶摊,并以聲明的方式將它們應(yīng)用到它們需要影響的組件中去。所造成的結(jié)果就是這些組件會(huì)具有更高的內(nèi)聚性并且會(huì)更加關(guān)注自身的業(yè)務(wù)等孵,完全不需要了解涉及系統(tǒng)服務(wù)所帶來(lái)復(fù)雜性蹂空。總之上枕,AOP能夠確保POJO的簡(jiǎn)單性。
我們可以把切面想象為覆蓋在很多組件之上的一個(gè)外殼棋恼。應(yīng)用是由那些實(shí)現(xiàn)各自業(yè)務(wù)功能的模塊組成的锈玉。借助AOP, 可以使用各種功能層去包裹核心業(yè)務(wù)層师崎。 這些層以聲明的方式靈活地應(yīng)用到系統(tǒng)中椅棺, 你的核心應(yīng)用甚至根本不知道它們的存在。 這是一個(gè)非常強(qiáng)大的理念两疚, 可以將安全、 事務(wù)和日志關(guān)注點(diǎn)與核心業(yè)務(wù)邏輯相分離诱渤。
我們是專(zhuān)業(yè)做JAVA畢設(shè)定制的,區(qū)別于某寶上的成品, 我們是代做+講解碑韵,全程協(xié)助你選題以及代寫(xiě)你的設(shè)計(jì)程序部分∑糜眨可以先給你做赊锚,看了滿(mǎn)意后才付款的哦。
流程:
一溝通分析(按照開(kāi)題思路溝通設(shè)計(jì)耸袜、完成開(kāi)題報(bào)告)
二確認(rèn)方案(編寫(xiě)代碼牲平,本店特色每行代碼實(shí)現(xiàn)的功能你不懂的可講解)
三完成20%(完成一部分給看效果)
四完成100%(驗(yàn)收交貨)
五售后(導(dǎo)師提修改意見(jiàn)可進(jìn)行修改)
六設(shè)計(jì)可全篇講解(需要一對(duì)一講解詳詢(xún)客服)
七答辯指導(dǎo)(最終完成畢業(yè)答辯)
我們是做專(zhuān)業(yè)定制的團(tuán)隊(duì),我們的老師人都非常好蜈抓。有需要的同學(xué)可以ADD me昂儒,My Q-Q number is one--zero-three-two-three-seven-one-two-one。
至于畢業(yè)設(shè)計(jì)的論文腊嗡,格式拾酝,字?jǐn)?shù),查重客们,就這些要求我們會(huì)給你講方法蟋软。只要你按照方法去做都可以完成。
利用AOP, 系統(tǒng)范圍內(nèi)的關(guān)注點(diǎn)覆蓋在它們所影響組件之上
為了示范在基于spring的設(shè)計(jì)中如何應(yīng)用切面碌冶, 讓我們重新回到騎士的例子, 并為它添加一個(gè)切面譬重。
每一個(gè)人都熟知騎士所做的任何事情,這是因?yàn)橐饔卧?shī)人用詩(shī)歌記載了騎士的事跡并將其進(jìn)行傳唱滩援。假設(shè)我們需要使用吟游詩(shī)人這個(gè)服務(wù)類(lèi)來(lái)記載騎士的所有事跡塔嬉。程序清單1.9展示了我們會(huì)使用的Minstrel類(lèi)。我們的團(tuán)隊(duì)都是多年開(kāi)發(fā)經(jīng)驗(yàn)的老師谨究,另可承接各中小系統(tǒng)程序開(kāi)發(fā)項(xiàng)目。
給大家推薦部分2021年最新選題:
基于SSM框架的疫情防控管理系統(tǒng)
基于SSM框架的社區(qū)疫情管理系統(tǒng)
基于SSM框架的小區(qū)防疫管理系統(tǒng)
基于SSM框架的農(nóng)貿(mào)信息化管理平臺(tái)
基于SSM框架的大學(xué)生創(chuàng)業(yè)項(xiàng)目管理平臺(tái)
基于SSM框架的幼兒托管服務(wù)管理系統(tǒng)
基于SSM框架的廢品回收管理系統(tǒng)
基于SSM框架的校園疫情防控管理系統(tǒng)
基于SSM框架的校園疫情防控管理系統(tǒng)
基于SSM框架物流管理系統(tǒng)
基于SSM框架網(wǎng)絡(luò)資產(chǎn)管理系統(tǒng)
基于SSM框架網(wǎng)絡(luò)硬盤(pán)管理系統(tǒng)
基于SSM框架股份管理系統(tǒng)
基于SSM框架學(xué)校比賽賽事管理系統(tǒng)
基于SSM框架進(jìn)銷(xiāo)存管理系統(tǒng)
基于SSM框架影碟管理系統(tǒng)
基于SSM框架旅游景點(diǎn)管理系統(tǒng)
基于SSM框架客戶(hù)關(guān)系管理系統(tǒng)
基于SSM框架客戶(hù)服務(wù)管理系統(tǒng)
基于SSM框架學(xué)校機(jī)構(gòu)管理系統(tǒng)
基于SSM框架固定資產(chǎn)管理系統(tǒng)
基于SSM醫(yī)院門(mén)診住院管理系統(tǒng)
基于SSM學(xué)生公寓管理系統(tǒng)
基于SSM酒店住宿管理系統(tǒng)
基于SSM BBS論壇
基于SSM個(gè)人博客
基于SSM藥房藥庫(kù)管理
基于SSM公司會(huì)議室管理系統(tǒng)
基于SSM房地產(chǎn)銷(xiāo)售管理系統(tǒng)
基于SSM物業(yè)管理系統(tǒng)
基于SSM銷(xiāo)售管理系統(tǒng)
基于SSM醫(yī)院藥品管理系統(tǒng)
基于SSM房屋出租管理系統(tǒng)
基于JAVA的超市管理系統(tǒng)
基于JAVA的網(wǎng)上購(gòu)物系統(tǒng)
基于JAVA的物流管理系統(tǒng)
基于JAVA的汽車(chē)租賃管理系統(tǒng)
基于JAVA的點(diǎn)菜管理系統(tǒng)
基于JAVA的招聘求職管理系統(tǒng)
基于JAVA的代做網(wǎng)絡(luò)資產(chǎn)管理系統(tǒng)
基于JAVA的家政管理系統(tǒng)
基于JAVA的 企業(yè)管理系統(tǒng)
基于JAVA的網(wǎng)絡(luò)硬盤(pán)系統(tǒng)
基于JAVA的醫(yī)院門(mén)診管理系統(tǒng)
基于JAVA的藥店進(jìn)銷(xiāo)存管理系統(tǒng)
基于JAVA的人力資源管理系統(tǒng)
基于JAVA的進(jìn)存銷(xiāo)管理系統(tǒng)
基于JAVA的新聞發(fā)布系統(tǒng)
基于JAVA的商品交易管理系統(tǒng)
基于JAVA的博客管理系統(tǒng)
基于JAVA的網(wǎng)上書(shū)城管理系統(tǒng)
基于JAVA的客戶(hù)滿(mǎn)意管理系統(tǒng)
基于JAVA的教務(wù)管理系統(tǒng)
基于JAVA的圖書(shū)管理系統(tǒng)
基于JAVA的物流倉(cāng)儲(chǔ)管理系統(tǒng)
基于JAVA的租車(chē)管理系統(tǒng)
基于JAVA的聊天室管理系統(tǒng)