考察點:spring程序員
依賴注入的三種方式:(1)接口注入(2)Construct注入(3)Setter注入spring
控制反轉(IoC)與依賴注入(DI)是同一個概念,引入IOC的目的:(1)脫開、下降類之間的耦合;(2)倡導面向接口編程、實施依賴倒換原則; (3)提升系統可插入、可測試、可修改等特性。數據庫
具體作法:(1)將bean之間的依賴關係儘量地抓換爲關聯關係;編程
(2)將對具體類的關聯儘量地轉換爲對Java interface的關聯,而不是與具體的服務對象相關聯;緩存
(3)Bean實例具體關聯相關Java interface的哪一個實現類的實例,在配置信息的元數據中描述;安全
(4)由IoC組件(或稱容器)根據配置信息,實例化具體bean類、將bean之間的依賴關係注入進來。性能優化
AOP(Aspect Oriented Programming),即面向切面編程,能夠說是OOP(Object Oriented Programming,面向對象編程)的補充和完善。OOP引入封裝、繼承、多態等概念來創建一種對象層次結構,用於模擬公共行爲的一個集合。不過OOP容許開發者定義縱向的關係,但並不適合定義橫向的關係,例如日誌功能。日誌代碼每每橫向地散佈在全部對象層次中,而與它對應的對象的核心功能毫無關係對於其餘類型的代碼,如安全性、異常處理和透明的持續性也都是如此,這種散佈在各處的無關的代碼被稱爲橫切(cross cutting),在OOP設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。服務器
AOP技術偏偏相反,它利用一種稱爲"橫切"的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其命名爲"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊之間的耦合度,並有利於將來的可操做性和可維護性。框架
使用"橫切"技術,AOP把軟件系統分爲兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特色是,他們常常發生在覈心關注點的多處,而各處基本類似,好比權限認證、日誌、事物。AOP的做用在於分離系統中的各類關注點,將核心關注點和橫切關注點分離開來。工具
考察點:事物管理
Spring支持編程式事務管理和聲明式事務管理。許多Spring框架的用戶選擇聲明式事務管理,由於這種方式和應用程序的關聯較少,所以更加符合輕量級容器的概念。聲明式事務管理要優於編程式事務管理,儘管在靈活性方面它弱於編程式事務管理,由於編程式事務容許你經過代碼控制業務。
事務分爲全局事務和局部事務。全局事務由應用服務器管理,須要底層服務器JTA支持(如WebLogic、WildFly等)。局部事務和底層採用的持久化方案有關,例如使用JDBC進行持久化時,須要使用Connetion對象來操做事務;而採用Hibernate進行持久化時,須要使用Session對象來操做事務。
這些事務的父接口都是PlatformTransactionManager。Spring的事務管理機制是一種典型的策略模式,PlatformTransactionManager表明事務管理接口,該接口定義了三個方法,該接口並不知道底層如何管理事務,可是它的實現類必須提供getTransaction()方法(開啓事務)、commit()方法(提交事務)、rollback()方法(回滾事務)的多態實現,這樣就能夠用不一樣的實現類表明不一樣的事務管理策略。使用JTA全局事務策略時,須要底層應用服務器支持,而不一樣的應用服務器所提供的JTA全局事務可能存在細節上的差別,所以實際配置全局事務管理器是可能須要使用JtaTransactionManager的子類,如:WebLogicJtaTransactionManager(Oracle的WebLogic服務器提供)、UowJtaTransactionManager(IBM的WebSphere服務器提供)等。
考察點:AOP
a. 鏈接點(Joinpoint):程序執行的某個特定位置(如:某個方法調用前、調用後,方法拋出異常後)。一個類或一段程序代碼擁有一些具備邊界性質的特定點,這些代碼中的特定點就是鏈接點。Spring僅支持方法的鏈接點。
b. 切點(Pointcut):若是鏈接點至關於數據中的記錄,那麼切點至關於查詢條件,一個切點能夠匹配多個鏈接點。Spring AOP的規則解析引擎負責解析切點所設定的查詢條件,找到對應的鏈接點。
c. 加強(Advice):加強是織入到目標類鏈接點上的一段程序代碼。Spring提供的加強接口都是帶方位名的,如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。
d. 引介(Introduction):引介是一種特殊的加強,它爲類添加一些屬性和方法。這樣,即便一個業務類本來沒有實現某個接口,經過引介功能,能夠動態的未該業務類添加接口的實現邏輯,讓業務類成爲這個接口的實現類。
e. 織入(Weaving):織入是將加強添加到目標類具體鏈接點上的過程,AOP有三種織入方式:①編譯期織入:須要特殊的Java編譯期(例如AspectJ的ajc);②裝載期織入:要求使用特殊的類加載器,在裝載類的時候對類進行加強;③運行時織入:在運行時爲目標類生成代理實現加強。Spring採用了動態代理的方式實現了運行時織入,而AspectJ採用了編譯期織入和裝載期織入的方式。
f. 切面(Aspect):切面是由切點和加強(引介)組成的,它包括了對橫切關注功能的定義,也包括了對鏈接點的定義。
考察點:動態代理
AOP(Aspect Orient Programming),指面向方面(切面)編程,做爲面向對象的一種補充,用於處理系統中分佈於各個模塊的橫切關注點,好比事務管理、日誌、緩存等等。AOP實現的關鍵在於AOP框架自動建立的AOP代理,AOP代理主要分爲靜態代理和動態代理,靜態代理的表明爲AspectJ;而動態代理則以Spring AOP爲表明。一般使用AspectJ的編譯時加強實現AOP,AspectJ是靜態代理的加強,所謂的靜態代理就是AOP框架會在編譯階段生成AOP代理類,所以也稱爲編譯時加強。
Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理經過反射來接收被代理的類,而且要求被代理的類必須實現一個接口。JDK動態代理的核心是InvocationHandler接口和Proxy類。
若是目標類沒有實現接口,那麼Spring AOP會選擇使用CGLIB來動態代理目標類。CGLIB(Code Generation Library),是一個代碼生成的類庫,能夠在運行時動態的生成某個類的子類,注意,CGLIB是經過繼承的方式作的動態代理,所以若是某個類被標記爲final,那麼它是沒法使用CGLIB作動態代理的。
考察點:spring AOP
Authentication 權限 ,Caching 緩存 ,Context passing 內容傳遞 ,Error handling 錯誤處理 ,Lazy loading 懶加載 ,Debugging 調試 ,logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準,Performance optimization 性能優化 ,Persistence 持久化 ,Resource pooling 資源池 ,Synchronization 同步,Transactions 事務。
考察點:框架
- 非侵入式:支持基於POJO的編程模式,不強制性的要求實現Spring框架中的接口或繼承Spring框架中的類。
- IoC容器:IoC容器幫助應用程序管理對象以及對象之間的依賴關係,對象之間的依賴關係若是發生了改變只須要修改配置文件而不是修改代碼,由於代碼的修改可能意味着項目的從新構建和完整的迴歸測試。有了IoC容器,程序員不再須要本身編寫工廠、單例,這一點特別符合Spring的精神"不要重複的發明輪子"。
- AOP(面向切面編程):將全部的橫切關注功能封裝到切面(aspect)中,經過配置的方式將橫切關注功能動態添加到目標代碼上,進一步實現了業務邏輯和系統服務之間的分離。另外一方面,有了AOP程序員能夠省去不少本身寫代理類的工做。
- MVC:Spring的MVC框架爲Web表示層提供了更好的解決方案。
- 事務管理:Spring以寬廣的胸懷接納多種持久層技術,而且爲其提供了聲明式的事務管理,在不須要任何一行代碼的狀況下就可以完成事務管理。
- 其餘:選擇Spring框架的緣由還遠不止於此,Spring爲Java企業級開發提供了一站式選擇,你能夠在須要的時候使用它的部分和所有,更重要的是,甚至能夠在感受不到Spring存在的狀況下,在你的項目中使用Spring提供的各類優秀的功能。
考察點:spring
Spring是一個輕量級的DI和AOP容器框架,在項目的中的使用愈來愈普遍,它的優勢主要有如下幾點:
Spring是一個非侵入式框架,其目標是使應用程序代碼對框架的依賴最小化,應用代碼能夠在沒有Spring或者其餘容器的狀況運行。
Spring提供了一個一致的編程模型,使應用直接使用POJO開發,從而可使運行環境隔離開來。
Spring推進應用的設計風格向面向對象及面向接口編程轉變,提升了代碼的重用性和可測試性。
Spring改進告終構體系的選擇,雖然做爲應用平臺,Spring能夠幫助咱們選擇不一樣的技術實現,好比從Hibernate切換到其餘的ORM工具,從Struts切換到Spring MVC,儘管咱們一般不會這麼作,可是咱們在技術方案上選擇使用Spring做爲應用平臺,Spring至少爲咱們提供了這種可能性的選擇,從而下降了平臺鎖定風險。
考察點:框架
攔截器是AOP的一種實現,struts2 攔截器採用xwork2的interceptor!而spring的AOP基於IoC基礎,其底層採用動態代理與CGLIB代理兩種方式結合的實現方式。
考察點:spring
Spring是一個輕量級框架,能夠一站式構建你的企業級應用。
Spring的模塊大概分爲6個。分別是:
一、Core Container(Spring的核心)【重要】
二、AOP(面向切面變成)【重要】
三、Messaging(消息發送的支持)
四、Data Access/Integration(數據訪問和集成)
五、Web(主要是SpringWeb內容,包括MVC)【重要】
六、Test(Spring測試支持,包含JUint等測試單元的支持) 七、Instrumentation(設備支持,好比Tomcat的支持)
考察點:框架
所謂"持久"就是將數據保存到可掉電式存儲設備中以便從此使用,簡單的說,就是將內存中的數據保存到關係型數據庫、文件系統、消息隊列等提供持久化支持的設備中。持久層就是系統中專一於實現數據持久化的相對獨立的層面。
持久層設計的目標包括:
- 數據存儲邏輯的分離,提供抽象化的數據訪問接口。
- 數據訪問底層實現的分離,能夠在不修改代碼的狀況下切換底層實現。
- 資源管理和調度的分離,在數據訪問層實現統一的資源調度(如緩存機制)。
- 數據抽象,提供更面向對象的數據操做。
持久層框架有:- Hibernate- MyBatis- TopLink- Guzz- jOOQ- Spring Data- ActiveJDBC