Spring
1.Spring工作機制及為什么要用?
Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。Spring既是一個AOP框架,也是一IOC容器。
SpringFramework的組成:Spring AOP,Spring DAO,Spring ORM,Spring Web,Spring Context, Spring Web MVC。
Spring的核心就是IOC和AOP,所以Spring的工作機制簡單的理解也就是IOC和AOP的工作機制。
借助於Spring AOP,Spring IoC能夠很方便的使用到非常健壯、靈活的企業級服務,通過使用IoC能夠降低組件之間的耦合度,最終,能夠提高類的重用性,利於測試,而且更利於整個產品或系統集成和配置。
2.說說AOP和IOC的概念以及在spring中是如何應用的?
AOP,Aspect Oriented Program,面向(方面)切面的編程;
IOC,Invert Of Control,控制反轉。
(ioc是控制反轉,是spring的核心思想。通過面向接口編程來實現對業務組件的動態依賴。
aop是面向切面編程,它並不是只在spring或者java中才有的,它和面向對象編程(oop)是相對而言的另一種編程思想。
spring在實現aop編程時利用的是java的代理機制。
)
簡單說一下,IOC就是其實就是依賴注入,即用接口編程,在程序中不出現new關鍵字,而是用接口來命名引用,然后通過某種方式把接口的某個實現類的實例注入到引用里,從而實現接口與具體實現類的松耦合。
由容器控制程序之間的關系(通過XML配置),而非傳統實現中的由程序代碼直接操控,(在一個Class對象中引用另一個Class對象時,我們通常都是直接通過new contructor)。控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂的反轉。
AOP方式很類似filter,就是在程序正常的業務流中間像切面一樣插入很多其他需要執行的代碼,比如登錄時候,在進入登錄頁面前寫入日志,很常用的,尤其是跟數據庫有關的,或者跟支付有關的程序肯定會在每一步前面插入日志。面向方面的編程,即 AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。
AOP Advice(AOP增強)分為:
前置增強
后置增強
異常增強
環繞增強
3.Spring的事務有幾種方式?談談spring事物的隔離級別和傳播行為?
聲明式事務 使用spring聲明式事務,spring使用AOP來支持聲明式事務,會根據事務屬性,自動在方法調用之前決定是否開啟一個事務,並在方法執行之后決定事務提交或回滾事務。
事務的隔離級別:
數據庫系統提供了4種事務隔離級別,在這4種隔離級別中,Serializable的隔離級別最高,Read Uncommitted的隔離級別最低;
· Read Uncommitted 讀未提交數據;(會出現臟讀)
· Read Committed 讀已提交數據;
· Repeatable Read 可重復讀;
· Serializable 串行化
事務的傳播屬性包括:
· Required 業務方法需要在一個事務中運行,如果一個方法運行時已經處在一個事務中,那么加入到該事務,否則為自己創建一個新事務,80%的方法用到該傳播屬性;
· Not-Supported
· Requiresnew
· Mandatoky
· Supports
· Never
· Nested
4. Spring的優點和缺點?
⑴Spring的優點:
① Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB;
② Spring能消除在許多工程中常見的對Singleton的過多使用。(因為它降低了系統的可測試性和面向對象的程度);
③ 通過一種在不同應用程序和項目間一致的方法來處理配置文件,Spring能消除各種各樣自定義格式的屬性文件的需要。Inversion of Control的使用幫助完成了這種簡化;
④ 通過把對接口編程而不是對類編程的代價幾乎減少到沒有,Spring能夠促進養成好的編程習慣;
⑤ Spring被設計為讓使用它創建的應用盡可能少的依賴於他的APIs,在Spring應用中的大多數業務對象沒有依賴於Spring;
⑥ 使用Spring構建的應用程序易於單元測試;
⑦ Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼;
⑧ Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,他們適用於許多web應用。例如:Spring能使用AOP提供聲明性事務管理而不通過EJB容器;
⑨ Spring為數據存取提供了一個一致的框架不論使用的是JDBC還是O/R mapping產品;
⑵Spring的缺點:
① 使用人數不多,jsp中要寫很多代碼;
② 控制器過於靈活,缺少一個公用控制器。