spring架構在開發中為我們做了哪些事?_spring

來源:互聯網
上載者:User

開發中利用spring可以減輕程式員工作負擔,提高代碼的複用率,降低程式的耦合性,簡化代碼易於程式的擴充和維護。那麼spring是如何?這些功能的呢,spring在開發中為我們做了哪些事呢。

1、spring實現了ioc 即控制反轉,將對象的建立的控制權由程式員的手動建立轉變為spring容器來協助我們實現對象的建立。

這麼做有什麼好處呢。

a)程式員建立對象變得輕鬆,不需要使用一次對象就建立一次對象,只需在spring設定檔中編寫對象的bean並且注入對象的屬性。

b)通過對bean的統一管理可以輕鬆實現對象的單例模式、原型模式等

c)由於對象是spring容器建立的,所以類與類的聯絡都要通過spring來聯絡起來,降低了程式碼之間的耦合性

2、spring的aop編程模式

談到aop 不得不提到動態代理、靜態代理。aop的本質其實就是動態代理。舉個通俗的例子,例如我們去租房子,大部分人都是通過代理來租房的,這樣可以有更多的房源供使用者選擇,如果自己去找房子那麼效率是極其低下的,半天也未必能找到滿意的房子。同理我們程式在運行中也是需要訪問dao類來實現service服務,然而為了讓我們的領域業務不被修改(我們可能會在業務裡面加上日誌,安全,事物處理等方面的代碼),我們可以寫一個dao代理類來實現領域業務(純粹的業務,不加任何附加方法)的功能並且可以在該dao代理類中添加日誌,安全或者事物的方法來滿足業務需求。這樣就實現了業務分工(領域業務一波人寫,公用業務一人寫)。這就是靜態代理,但是這樣寫,每一個service就需要寫一個代理類,增加了程式員的代碼負擔,所以聰明的程式員們引入了動態代理。

何為動態代理。我們可以提供這樣的一個思路---程式員只需提供領域業務的介面以及具體實現service,如果讓程式員來手動寫可以寫一個靜態代理來實現業務需求,但是我們現在把這個工作交給第三方程式碼來做,智能的寫出代理類,當調用的時候把代理類建立出來執行方法,底層是通過java反射機制來實現的。

那麼第三方的程式是如何來實現的呢。代理如下

JDK動態代理中包含一個類和一個介面:

JDK動態代理中包含一個類和一個介面: InvocationHandler介面: public interface InvocationHandler { public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; } 參數說明: Object proxy:指被代理的對象。 Method method:要調用的方法 Object[] args:方法調用時所需要的參數 InvocationHandler是代理類調用方法的處理常式,把代理類,調用的方法,需要的參數傳進來<span style="color:#FF0000;">通過invoke執行被代理對象的方法----這裡就是反射機制的體現</span>Proxy類: Proxy類是專門完成代理的操作類,可以通過此類為一個或多個介面動態地產生實作類別,此類提供了如下的操作方法: public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)                                throws IllegalArgumentException 參數說明: ClassLoader loader:類載入器 Class<?>[] interfaces:得到全部的介面 InvocationHandler h:得到InvocationHandler介面的子類執行個體 
從上面大段代碼裡面我們可以看出動態代理是如何?的。說完了動態代理我們可以談談aop編程了,也就是面向切面的編程。

我們通常的編程模式是jsp---action---service---dao,通過這樣的模式我們可以把領域業務寫的非常的純粹,但是通常我們需要滿足的業務是比較複雜的,所以我們需要在純粹的領域業務中加入一些公用業務(日誌等),比如對service添加業務,我們可以形象的理解為把service切開,往service某個方法前後添加日誌業務這樣業務實際執行的流程就變為jsp---action---代理service---dao,我們稱這樣橫切添加業務代碼模組的方式稱為aop編程。使用aop編程,可以實現業務分工,提高代碼的複用性,簡化代碼,使程式員的精力集中在業務的實現上,而不是重複的寫相同代碼。

總結:其實spring很簡單,就為我們做了兩件事第一件是控制反轉,第二件是aop切入式編程。後者是不依賴於spring的你可以選擇不使用。

ps:其實spring還是依賴注入的(di)即建立對象的屬性是通過beans.xl注入來實現的,可以歸類為ioc控制反轉。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.