要使用的spring的目的是:解決企業應用開發的複雜性。 spring是一個輕量級的控制反轉和麵向切面的容器框架。 spring可以將簡單的組件配置、組合成為複雜的應用。
(相關推薦:java面試題)
一、為什麼要使用 spring?
1、簡介
目的:解決企業應用程式開發的複雜性
功能:使用基本的JavaBean取代EJB,並提供了更多的企業應用功能
範圍:任何Java應用
簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
2、輕量
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR檔案裡發布。而Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴Spring的特定類別。
3、控制反轉
Spring透過一種稱作控制反轉(IoC)的技術促進了鬆散耦合。當應用了IoC,一個物件依賴的其它物件會透過被動的方式傳遞進來,而不是這個物件自己創建或尋找依賴物件。你可以認為IoC與JNDI相反-不是物件從容器中尋找依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它。
4、面向切面
Spring提供了面向切面程式設計的豐富支持,允許透過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。
5、容器
Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基於一個可配置原型(prototype),你的bean可以創建一個單獨的實例或每次需要時都產生一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。
6、框架
Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用程式物件被聲明式地組合,典型地是在一個XML檔案裡。 Spring也提供了許多基礎功能(事務管理、持久化框架整合等等),將應用邏輯的發展留給了你。
所有Spring的這些特徵使你能夠編寫更乾淨、更可管理、並且更易於測試的程式碼。它們也為Spring中的各種模組提供了基礎支援。
二、解釋一下什麼是 aop?
AOP(Aspect-Oriented Programming,面向方面程式設計),可以說是OOP(Object-Oriented Programing,物件導向程式設計)的補充和完善。 OOP引入封裝、繼承和多態性等概念來建立一個物件層次結構,以模擬公共行為的一個集合。
當我們需要為分散的物件引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關係,但不適合定義從左到右的關係。例如日誌功能。日誌程式碼往往水平地散佈在所有物件層次中,而與它所散佈到的物件的核心功能毫無關係。
對於其他類型的程式碼,如安全性、異常處理和透明的持續性也是如此。這種散佈在各處的無關的程式碼稱為橫切(cross-cutting)程式碼,在OOP設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。
而AOP技術則恰恰相反,它利用一種稱為「橫切」的技術,剖解開封裝的物件內部,並將那些影響了多個類別的公共行為封裝到一個可重複使用模組,並將其名為“Aspect”,即方面。
所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同調用的邏輯或責任封裝起來,便於減少系統的重複代碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。
AOP代表的是一個橫向的關係,如果說「物件」是一個空心的圓柱體,其中封裝的是物件的屬性和行為;那麼面向方面編程的方法,就彷彿一把利刃,將這些空心圓柱體剖開,以獲得其內部的消息。而剖開的切面,也就是所謂的「面向」了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡。
使用「橫切」技術,AOP把軟體系統分成兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。
橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處都基本相似。例如權限認證、日誌、事務處理。 Aop 的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分開。
正如Avanade公司的高級方案架構師Adam Magee所說,AOP的核心思想就是「將應用程式中的商業邏輯同對其提供支援的通用服務進行分離。」
三、解釋一下什麼是ioc?
IOC是Inversion of Control的縮寫,多數書翻譯成「控制反轉」。
1996年,Michael Mattson在一篇有關探討物件導向架構的文章中,首先提出了IOC 這個概念。對於物件導向設計及程式設計的基本思想,前面我們已經講了很多了,不再贅述,簡單來說就是把複雜系統分解成相互合作的對象,這些物件類別透過封裝以後,內部實現對外部是透明的,從而降低了解決問題的複雜度,而且可以靈活地被重複使用和擴展。
IOC理論提出的觀點大致是這樣的:借助於「第三方」實現具有依賴關係的物件之間的解耦。如下圖:
大家看到了吧,由於引進了中間位置的“第三方”,也就是IOC容器,使得A、B、C、D這4個物件沒有了耦合關係,齒輪之間的傳動全部依靠「第三方」了,全部物件的控制權全部上繳給「第三方」IOC容器。
所以,IOC容器成了整個系統的關鍵核心,它起到了一種類似「黏合劑」的作用,把系統中的所有物件黏合在一起發揮作用,如果沒有這個「粘合劑”,物件與物件之間會彼此失去聯繫,這就是有人把IOC容器比喻成“黏合劑”的由來。
我們再來做個試驗:把上圖中間的IOC容器拿掉,然後再來看看這套系統:
我們現在看到的畫面,就是我們要實現整個系統所需要完成的全部。這時候,A、B、C、D這4個物件之間已經沒有了耦合關係,彼此毫無連結。
這樣的話,當你在實現A的時候,根本無須再去考慮B、C和D了,對象之間的依賴關係已經降低到了最低程度。所以,如果真能實現IOC容器,對於系統開發而言,這將是一件多麼美好的事情,參與開發的每一成員只要實現自己的類別就可以了,跟別人沒有任何關係!
四、spring 有哪些主要模組?
Spring框架至今已整合了20多個模組。這些模組主要被分如下圖所示的核心容器、資料存取/整合,、Web、AOP(面向切面程式設計)、工具、訊息和測試模組。
五、spring 常用的注入方式有哪些?
Spring透過DI(依賴注入)實現IOC(控制反轉),常用的注入方式主要有三種:
建構方法注入
setter注入
基於註解的注入
以上是2020全新Java面試題-Spring的詳細內容。更多資訊請關注PHP中文網其他相關文章!