咱們是在使用Spring框架的過程當中,其實就是爲了使用IOC,依賴注入,和AOP,面向切面編程,這兩個是Spring的靈魂。java
主要用到的設計模式有工廠模式和代理模式。面試
IOC就是典型的工廠模式,經過sessionfactory去注入實例。spring
AOP就是典型的代理模式的體現。編程
代理模式是經常使用的java設計模式,他的特徵是代理類與委託類有一樣的接口,代理類主要負責爲委託類預處理消息、過濾消息、把消息轉發給委託類,以及過後處理消息等。代理類與委託類之間一般會存在關聯關係,一個代理類的對象與一個委託類的對象關聯,代理類的對象自己並不真正實現服務,而是經過調用委託類的對象的相關方法,來提供特定的服務。 設計模式
spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分。安全
在傳統的程序設計中,當調用者須要被調用者的協助時,一般由調用者來建立被調用者的實例。但在spring裏建立被調用者的工做再也不由調用者來完成,所以控制反轉(IoC);建立被調用者實例的工做一般由spring容器來完成,而後注入調用者,所以也被稱爲依賴注入(DI),依賴注入和控制反轉是同一個概念。服務器
面向方面編程(AOP)是以另外一個角度來考慮程序結構,經過分析程序結構的關注點來完善面向對象編程(OOP)。OOP將應用程序分解成各個層次的對象,而AOP將程序分解成多個切面。spring AOP 只實現了方法級別的鏈接點,在J2EE應用中,AOP攔截到方法級別的操做就已經足夠。在spring中,將來使IoC方便地使用健壯、靈活的企業服務,須要利用spring AOP實現爲IoC和企業服務之間創建聯繫。
IOC:控制反轉也叫依賴注入。利用了工廠模式
將對象交給容器管理,你只須要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啓動的時候,spring會把你在配置文件中配置的bean都初始化好,而後在你須要調用的時候,就把它已經初始化好的那些bean分配給你須要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不須要你在A裏面new這些bean了。
注意:面試的時候,若是有條件,畫圖,這樣更加顯得你懂了.session
AOP:面向切面編程。(Aspect-Oriented Programming)
AOP能夠說是對OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來創建一種對象層次結構,用以模擬公共行爲的一個集合。當咱們須要爲分散的對象引入公共行爲的時候,OOP則顯得無能爲力。也就是說,OOP容許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌代碼每每水平地散佈在全部對象層次中,而與它所散佈到的對象的核心功能毫無關係。在OOP設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。
將程序中的交叉業務邏輯(好比安全,日誌,事務等),封裝成一個切面,而後注入到目標對象(具體業務邏輯)中去。框架
實現AOP的技術,主要分爲兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;二是採用靜態織入的方式,引入特定的語法建立「方面」,從而使得編譯器能夠在編譯期間織入有關「方面」的代碼.oop
簡單點解釋,比方說你想在你的biz層全部類中都加上一個打印‘你好’的功能,這時就能夠用aop思想來作.你先寫個類寫個類方法,方法經實現打印‘你好’,而後Ioc這個類 ref=「biz.*」讓每一個類都注入便可實現。