本篇文章給大家分享的是有關Spring基礎中的DI/IOC和AOP原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設、網(wǎng)站重做改版、天鎮(zhèn)網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、HTML5、商城網(wǎng)站建設、集團公司官網(wǎng)建設、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為天鎮(zhèn)等各大城市提供網(wǎng)站開發(fā)制作服務。
Spring框架核心介紹
DI(Dependency Injection),依賴注入,和我們常聽說的另一個概念 IOC(控制反轉)其實歸根結底實現(xiàn)的功能是相同的,只是同樣的功能站在不同的角度來闡述罷了。這里博主就不去過多的辨析,度娘上有一大堆解釋。我們需要知道的是,什么叫依賴注入,為什么要依賴注入。搞清這兩點,我想對Spring的學習在思想上就算是上道了。
沒用使用Spring的時候——也就是沒有依賴注入的時候,java應用程序的類與類之間要實現(xiàn)相互的功能協(xié)作是比較費勁的,某個類(A)要實現(xiàn)它的功能如果需要依賴另一個類(B)的協(xié)作的話,就需要在A類中主動創(chuàng)建出B類的對象,才能使用B類的方法完成功能(這里看官就不要去糾結靜態(tài)方法之類的情況了)。這等于是A類需要負責B類對象整個生命周期的管理。
在極度簡單的情況下,在一個類中new出另一個類的對象似乎并沒有什么問題,但是復雜的應用程序類與類的協(xié)作關系往往是多邊的,我們并不知道一個類功能的實現(xiàn)會依賴多少個另類對象來協(xié)作,所以在類中自行創(chuàng)建對象并且管理對象的整個生命周期,會造成代碼的高度耦合以及不可想象的復雜度。
那么,試想,如果我們能將對象的生命周期交給第三方組件來管理,當某個類需要另外的對象時第三方組件就直接創(chuàng)建出來交給它,這樣,類就可以只專注于自己功能的實現(xiàn),而不用去管理其他類對象的生命周期,這樣類的功能就單純了很多。是的,你一定已經(jīng)明白了,Spring(容器)就是這個第三方組件。
我們只需要告訴Spring(容器)有哪些對象需要管理就行了,不用去關心Spring框架是如何創(chuàng)建對象的。這樣,當某個類A需要類B對象時,如果類B已經(jīng)聲明交給了Sping容器管理,那么在程序運行到類A需要類B時,Spring容器就通過依賴注入的方式,將類B對象注入到類A中協(xié)助完成業(yè)務功能。通過第三方組件的依賴注入,對象無需再自行的創(chuàng)建和管理類與類之間的依賴關系了。
對象的創(chuàng)建依賴注入的方式也有多種,譬如接口注入,構造方法注入,setter方法注入等等。說到這里,你對依賴注入應該有比較直白的認知了。至于為什么要依賴注入,上文已經(jīng)說得很明白了,就是為了減少代碼中組件之間的耦合度,我們還是先通過簡單示例來直觀感受下依賴注入比自己管理對象的好處吧——
public class Man implements Human {
private QQCar car;
public Man() {
this.car = new QQCar();
}
@Override
public void xiabibi() {
}
public void driveCar(){
car.drive();
}
}
接口Car暫有兩個實現(xiàn):奔馳車和QQ車,在以上Man類和QQCar類高度耦合的代碼中,老司機通過構造器只創(chuàng)建了QQ車對象,所以只能開QQ車,那么老司機想開奔馳怎么辦呢,你讓他重新創(chuàng)建奔馳車的對象嗎?這樣高度耦合的代碼似乎是毫無辦法的,那么,我們通過注入對象的方式對上述代碼做一番改進:
public class Man implements Human {
private Car car;
public Man(Car car) {
this.car = car;
}
@Override
public void xiabibi() {
}
public void driveCar() {
car.drive();
}
}
以上代碼根據(jù)多態(tài)特性,通過構造器接口注入的方式屏蔽掉了具體的對象實現(xiàn),這樣,老司機就能想開什么車就開什么車了。這就是依賴注入帶來的好處。
AOP(Aspect Oriented Programming),面向切面編程。日常開發(fā)中,我們在完成某個業(yè)務功能的時候,寫了一堆代碼,到最后代碼優(yōu)化的時候發(fā)現(xiàn),真正完成業(yè)務的代碼可能就那么兩句,而其余都是與該部分業(yè)務相關度不大,僅僅是為了實現(xiàn)某種技術的代碼,是完全可以抽離出去的,于是很自然的,我們會將其抽取成一個工具類,這樣凡是用到的地方只需調用一下工具方法就ok了。
我們再站高一點看,各個業(yè)務模塊的功能組件中除了完成相關的業(yè)務功能外,都有涉及日志、事務、安全控制等額外的操作等。這些并不是模塊的核心功能,卻又不可或缺。如果將這些額外功能添加進代碼,業(yè)務系統(tǒng)每個組件都來一套又顯得太過重復,而且讓業(yè)務代碼顯得混亂,不夠純粹。這個時候,你問上帝,可不可以讓你的業(yè)務代碼只專注于業(yè)務的實現(xiàn),不去管什么日志、事務等不相干的東西?喔,上帝說沒問題,于是就有了AOP。
如果說依賴注入的目的是讓相互協(xié)作的組件保持一種較為松散的耦合狀態(tài)的話,AOP則是將遍布應用各處的功能分離出來形成可重用的組件。通俗點說,日志、事務等都是可以重用的組件,我們完全可以將分散于業(yè)務代碼各處的日志、事務、安全等功能代碼抽離出成為一個單獨的工具組件,在Spring的配置中將其進行聲明為一個功能切面,再告訴Spring你想在哪些地方、什么時機使用(切入)這些可重用組件就行了。這就是我對面向切面的簡單釋義。
以上就是Spring基礎中的DI/IOC和AOP原理是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁標題:Spring基礎中的DI/IOC和AOP原理是什么
當前路徑:http://www.chinadenli.net/article14/ighige.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、標簽優(yōu)化、微信小程序、移動網(wǎng)站建設、定制開發(fā)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)