Spring的AOP和IoC/DI
阿新 • • 發佈:2018-11-06
一、Ioc、DI
控制反轉、依賴注入
在A類中呼叫B類的方法,那麼我們就稱 A依賴B,B為被依賴(物件)
傳統做法:
(1)直接在A(方法)中new出B類物件,然後呼叫B類方法 —— 硬編碼耦合;
(2)通過簡單工廠獲取B類物件,然後呼叫B類的方法 —— 擺脫了與B的耦合,卻又與工廠產生了耦合;
以上兩種做法,都是在A中主動去new或呼叫簡單工廠的方法產生B的物件,注意,關鍵字是“主動”
Spring框架
在spring中,B的例項物件被看成Bean物件,這個Bean物件由spring容器進行建立和管理,當我們在配置檔案中配置<Bean>下的<property>子元素時,spring就會自動執行在A中對B物件的setter方法(即A中需要有對B物件的setter方法),
如此一來,A獲取B的例項物件就不是由自己主動去獲取,而是被動接受spring給它設值,那麼,這個主動變為被動,就可以理解為“控制反轉”。
而另一種說法,從spring容器的角度上看,它負責把A的依賴物件B(B是被依賴物件)注入給了A,所以我們可以理解為“依賴注入”;
<bean id="userAction" class="com.router.action.UserAction" scope="prototype">
<!-- 注入Service -->
<property name="userService" ref="userService" />
</bean>
當然也可以用@Autowired注入。
二、AOP
AOP —— Asepct-Orentid-Programming,面向切面程式設計
Aop 的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。
AOP的核心思想就是“將應用程式中的商業邏輯同對其提供支援的通用服務進行分離。”
@Before,@After