1. 程式人生 > >面試中問的話題Spring工作原理

面試中問的話題Spring工作原理

 Spring工作原理
內部最核心的就是IOC了, 
動態注入,讓一個物件的建立不用new了,可以自動的生產,這其實就是利用java裡的反射 
反射其實就是在執行時動態的去建立、呼叫物件,Spring就是在執行時,跟xml Spring的配置 
檔案來動態的建立物件,和呼叫物件裡的方法的 。 
  Spring還有一個核心就是AOP這個就是面向切面程式設計,可以為某一類物件 進行監督和控制(也就是 
在呼叫這類物件的具體方法的前後去呼叫你指定的 模組)從而達到對一個模組擴充的功能。這些都是通過 
配置類達到的。 
  Spring目的:就是讓物件與物件(模組與模組)之間的關係沒有通過程式碼來關聯,都是通過配置類說明 
管理的(Spring根據這些配置 內部通過反射去動態的組裝物件) 
  要記住:Spring是一個容器,凡是在容器裡的物件才會有Spring所提供的這些服務和功能。 
Spring裡用的最經典的一個設計模式就是:模板方法模式。(這裡我都不介紹了,是一個很常用的設計模式) 
  Spring裡的配置是很多的,很難都記住,但是Spring裡的精華也無非就是以上的兩點,把以上兩點跟理解了 也就基本上掌握了Spring.

Spring AOP與IOC
一、 IoC(Inversion of control): 控制反轉 
1、IoC: 
概念:控制權由物件本身轉向容器;由容器根據配置檔案去建立例項並建立各個例項之間的依賴關係 
核心:bean工廠;在Spring中,bean工廠建立的各個例項稱作bean 
二、AOP(Aspect-Oriented Programming): 面向方面程式設計 
1、 代理的兩種方式: 
靜態代理: 
 針對每個具體類分別編寫代理類; 
 針對一個介面編寫一個代理類; 
動態代理: 
針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類為各種介面動態生成相應的代理類
Spring 優缺點


它是一個開源的專案,而且目前非常活躍;它基於IoC(Inversion of Control,反向控制)和AOP的構架多層j2ee系統的框架,但它不強迫你必須在每一層 中必須使用Spring,因為它模組化的很好,允許你根據自己的需要選擇使用它的某一個模組;它實現了很優雅的MVC,對不同的資料訪問技術提供了統一的 介面,採用IoC使得可以很容易的實現bean的裝配,提供了簡潔的AOP並據此實現Transcation Managment,等等
優點 
a. Spring能有效地組織你的中間層物件,不管你是否選擇使用了EJB。如果你僅僅使用了Struts或其他為J2EE的 API特製的framework,Spring致力於解決剩下的問題。 
b. Spring能消除在許多工程中常見的對Singleton的過多使用。根據我的經驗,這是一個很大的問題,它降低了系統的可測試性和麵向物件的程度。 
c. 通過一種在不同應用程式和專案間一致的方法來處理配置檔案,Spring能消除各種各樣自定義格式的屬性檔案的需要。曾經對某個類要尋找的是哪個魔法般的屬性項或系統屬性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。Inversion of Control的使用(在下面討論)幫助完成了這種簡化。 
d. 通過把對介面程式設計而不是對類程式設計的代價幾乎減少到沒有,Spring能夠促進養成好的程式設計習慣。 
e. Spring被設計為讓使用它建立的應用盡可能少的依賴於他的APIs。在Spring應用中的大多數業務物件沒有依賴於Spring。 
f. 使用Spring構建的應用程式易於單元測試。 
g. Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務介面,卻不會影響呼叫程式碼。 
h. Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適用於許多web應用。例如,Spring能使用AOP提供宣告性事務管理而不通過EJB容器,如果你僅僅需要與單個數據庫打交道,甚至不需要一個JTA實現。 
i. Spring為資料存取提供了一個一致的框架,不論是使用的是JDBC還是O/R mapping產品(如Hibernate)。 
Spring確實使你能通過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。

缺點:jsp中要寫很多程式碼、控制器過於靈活,缺少一個公用控制器