關於Spring的這15點總結,打死都要會。

一隻有夢想的魚發表於2019-05-09

1.Spring 中 AOP 的應用場景、Aop 原理、好處?

答:AOP 用來封裝橫切關注點,具體可以在下面的場景中使用: Authentication 許可權、Caching 快取、Context passing 內容傳遞、Error handling 錯誤處理 Lazy loading 懶載入、Debugging 除錯、logging, tracing, profiling and monitoring 記錄跟蹤優化 校準、Performance optimization 效能優化、Persistence 持久化、Resource pooling 資源池、 Synchronization 同步、Transactions 事務

原理:AOP 是面向切面程式設計,是通過代理的方式為程式新增統一功能,集中解決一些公 共問題。

好處:1.各個步驟之間的良好隔離性 2.原始碼無關性

2.Spring 中 IOC 的作用與原理?物件建立的過程。

答:當某個角色需要另外一個角色協助的時候,在傳統的程式設計過程中,通常由呼叫 者來建立被呼叫者的例項。但在 spring 中建立被呼叫者的工作不再由呼叫者來完成,因此稱 為控制反轉。建立被呼叫者的工作由 spring 來完成,然後注入呼叫者 。

IOC 本質上是一個容器,已 MAP 對 IOC 簡單舉例,伺服器載入配置檔案,由 xml 文件 解析工具讀取 bean 的 ID,獲取 class,使用反射建立物件,以 K-V 的形式存入 MAP,K 是 ID, V 是反射建立的物件。獲取物件可以呼叫 context.getBean(K)的方式。

3.介紹 spring 框架

它是一個 full-stack 框架,提供了從表現層到業務層再到持久層的一套完整的解決方案。我 們在專案中可以只使用 spring 一個框架,它就可以提供表現層的 mvc 框架,持久層的 Dao 框架。它的兩大核心 IoC 和 AOP 更是為我們程式解耦和程式碼簡潔易維護提供了支援。

 

4.Spring 常見建立物件的註解?

答:@Component@Controller@ Service@ Repository

5.Spring 中用到的設計模式

答:簡單工廠、工廠方法、單例模式、介面卡、包裝器、代理、觀察者、策略、模板方法 詳細介紹自己查了。

6.Spring 的優點?

1.降低了元件之間的耦合性 ,實現了軟體各層之間的解耦

2.可以使用容易提供的眾多服務,如事務管理,訊息服務等

3.容器提供單例模式支援

4.容器提供了 AOP 技術,利用它很容易實現如許可權攔截,執行期監控等功能

5.容器提供了眾多的輔助類,能加快應用的開發

6.spring 對於主流的應用框架提供了整合支援,如 hibernate,JPA,Struts 等

7.spring 屬於低侵入式設計,程式碼的汙染極低

8.獨立於各種應用伺服器

9.spring 的 DI 機制降低了業務物件替換的複雜性

10.Spring 的高度開放性,並不強制應用完全依賴於 Spring,開發者可以自由選擇 spring 的部分或全部

7.Spring Bean 的作用域之間有什麼區別?

Spring 容器中的 bean 可以分為 5 個範圍。所有範圍的名稱都是自說明的,但是為了避 免混淆,還是讓我們來解釋一下:

singleton:這種 bean 範圍是預設的,這種範圍確保不管接受到多少個請求,每個容器 中只有一個 bean 的例項,單例的模式由 bean factory 自身來維護。

prototype:原形範圍與單例範圍相反,為每一個 bean 請求提供一個例項。 黑馬程式設計師

request:在請求 bean 範圍內會每一個來自客戶端的網路請求建立一個例項,在請求完成以 後,bean 會失效並被垃圾回收器回收。

Session:與請求範圍類似,確保每個 session 中有一個 bean 的例項,在 session 過期後, bean 會隨之失效。

global-session:global-session 和 Portlet 應用相關。當你的應用部署在 Portlet 容器中工 作時,它包含很多 portlet。如果你想要宣告讓所有的 portlet 共用全域性的儲存變數的話,那 麼這全域性變數需要儲存在 global-session 中。 全域性作用域與 Servlet 中的 session 作用域效果相同。

8.Spring 管理事務有幾種方式?

答:有兩種方式:

1、程式設計式事務,在程式碼中硬編碼。(不推薦使用)

2、宣告式事務,在配置檔案中配置(推薦使用) 宣告式事務又分為兩種:

a、基於 XML 的宣告式事務

b、基於註解的宣告式事務

 

9.spring 中自動裝配的方式有哪些?

1、 No:即不啟用自動裝配。

2、 byName:通過屬性的名字的方式查詢 JavaBean 依賴的物件併為其注入。比如說類 Computer 有個屬性 printer,指定其 autowire 屬性為 byName 後,Spring IoC 容器會在配置文 件中查詢 id/name 屬性為 printer 的 bean,然後使用 Seter 方法為其注入。

3、 byType:通過屬性的型別查詢 JavaBean 依賴的物件併為其注入。比如類 Computer 有個屬性 printer,型別為 Printer,那麼,指定其 autowire 屬性為 byType 後,Spring IoC 容 器會查詢 Class 屬性為 Printer 的 bean,使用 Seter 方法為其注入。

4、 constructor:通 byType 一樣,也是通過型別查詢依賴物件。與 byType 的區別在於 它不是使用 Seter 方法注入,而是使用構造子注入。

5、 autodetect: 在 byType 和 constructor 之間自動的選擇注入方式。

6、 default: 由上級標籤<beans>的 default-autowire 屬性確定。

 

10.spring 中的核心類有那些,各有什麼作用?

BeanFactory:產生一個新的例項,可以實現單例模式

BeanWrapper:提供統一的 get 及 set 方法

ApplicationContext:提供框架的實現,包括 BeanFactory 的所有功能

 

11.Bean 的呼叫方式有哪些?

答:有三種方式可以得到 Bean 並進行呼叫:

1、使用 BeanWrapper

1 HelloWorld hw=new HelloWorld(); 
2 BeanWrapper bw=new BeanWrapperImpl(hw); 
3 bw.setPropertyvalue(”msg”,”HelloWorld”); 
4 System.out.println(bw.getPropertyCalue(”msg”));

2、使用 BeanFactory

1 InputStream is=new FileInputStream(”config.xml”); 
2 XmlBeanFactory factory=new XmlBeanFactory(is); 
3 HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”); 
4 System.out.println(hw.getMsg()); 

3、使用 ApplicationConttext

1 ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”); 
2 HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”); 
3 System.out.println(hw.getMsg()); 

12.什麼是 IOC,什麼又是 DI,他們有什麼區別?

答:依賴注入 DI 是一個程式設計模式和架構模型, 一些時候也稱作控制反轉,儘管在 技術上來講,依賴注入是一個 IOC 的特殊實現,依賴注入是指一個物件應用另外一個物件來 提供一個特殊的能力,例如:把一個 資料庫連線已引數的形式傳到一個物件的結構方法裡 面而不是在那個物件內部自行建立一個連線。

控制反轉和依賴注入的基本思想就是把類的依 賴從類內部轉化到外 部以減少依賴 應用控制反轉,物件在被建立的時候,由一個調控系統內所有物件的外界實體,將其所 依賴的物件的引用,傳遞給它。也可以說,依賴被注入到物件中。所 以,控制反轉是,關 於一個物件如何獲取他所依賴的物件的引用,這個責任的反轉。

 我做開發十多年的時間,如果大家對於學習java的學習方法,學習路線以及你不知道自己應該是自學還是培訓的疑問,都可以隨時來問我,大家可以加我的java交流學習qun:615741636。qun內有學習教程以及開發工具。

13.spring 有兩種代理方式:

1、若目標物件實現了若干介面,spring 使用 JDK 的 java.lang.reflect.Proxy 類代理。

優點:因為有介面,所以使系統更加鬆耦合

缺點:為每一個目標類建立介面

2、若目標物件沒有實現任何介面, spring 使用 CGLIB 庫生成目標物件的子類。

優點:因為代理類與目標類是繼承關係,所以不需要有介面的存在。

缺點:因為沒有使用介面,所以系統的耦合性沒有使用 JDK 的動態代理好。

 

14.springMVC 的流程?

1、使用者傳送請求至前端控制器 DispatcherServlet

2.DispatcherServlet 收到請求呼叫 HandlerMapping 處理器對映器。

3.處理器對映器根據請求 url 找到具體的處理器,生成處理器物件及處理器攔截器(如果 有則生成)一併返回給 DispatcherServlet。

4.DispatcherServlet 通過 HandlerAdapter 處理器介面卡呼叫處理器

5.執行處理器(Controller,也叫後端控制器)。

6.Controller 執行完成返回 ModelAndView

7.HandlerAdapter 將 controller 執行結果 ModelAndView 返回給 DispatcherServlet

8.DispatcherServlet 將 ModelAndView 傳給 ViewReslover 檢視解析器

9.ViewReslover 解析後返回具體 View

10.DispatcherServlet 對 View 進行渲染檢視(即將模型資料填充至檢視中)。

11.DispatcherServlet 響應使用者

15.Springmvc 的優點

1、它是基於元件技術的.全部的應用物件,無論控制器和檢視,還是業務物件之類的都是 java 元件.並且和 Spring 提供的其他基礎結構緊密整合.

2.不依賴於 Servlet API(目標雖是如此,但是在實現的時候確實是依賴於 Servlet 的)

3. 可以任意使用各種檢視技術,而不僅僅侷限於 JSP 4 . 支援各種請求資源的對映策略 5 .它應是易於擴充套件的

相關文章