IOC
IOC(Inversion Of Controll,控制反轉)是一種設計思想,將本來在程序中手動建立對象的控制權,交由給Spring框架來管理。IOC容器是Spring用來實現IOC的載體,IOC容器實際上就是一個Map(key, value),Map中存放的是各類對象。
這樣能夠很大程度上簡化應用的開發,把應用從複雜的依賴關係中解放出來。IOC容器就像是一個工廠,當須要建立一個對象,只須要配置好配置文件/註解便可,不用考慮對象是如何被建立出來的,大大增長了項目的可維護性且下降了開發難度。
AOP
AOP(Aspect-Oriented Programming,面向切面編程)可以將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任(例如事務處理、日誌管理、權限控制等)封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可擴展性和可維護性。使用AOP以後咱們能夠把一些通用功能抽象出來,在須要用到的地方直接使用便可,這樣能夠大大簡化代碼量,提升了系統的擴展性。
Spring AOP是基於動態代理的,若是要代理的對象實現了某個接口,那麼Spring AOP就會使用JDK動態代理去建立代理對象;而對於沒有實現接口的對象,就沒法使用JDK動態代理,轉而使用CGlib動態代理生成一個被代理對象的子類來做爲代理。
Spring AOP / AspectJ AOP 的區別?
Spring AOP屬於運行時加強,而AspectJ是編譯時加強。
Spring AOP基於代理(Proxying),而AspectJ基於字節碼操做(Bytecode Manipulation)。
AspectJ相比於Spring AOP功能更增強大,可是Spring AOP相對來講更簡單。若是切面比較少,那麼二者性能差別不大。可是,當切面太多的話,最好選擇AspectJ,它比SpringAOP快不少。