天天看點

談談Spring中的IOC和AOP概念

1. ioc(inverse of control):控制反轉,也可以稱為依賴倒置。

        所謂依賴,從程式的角度看,就是比如a要調用b的方法,那麼a就依賴于b,反正a要用到b,則a依賴于b。所謂倒置,你必須了解如果不倒置,會怎麼着,因為a必須要有b,才可以調用b,如果不倒置,意思就是a主動擷取b的執行個體:b b = new b(),這就是最簡單的擷取b執行個體的方法(當然還有各種設計模式可以幫助你去獲得b的執行個體,比如工廠、locator等等),然後你就可以調用b對象了。是以,不倒置,意味着a要主動擷取b,才能使用b;到了這裡,就應該明白了倒置的意思了。倒置就是a要調用b的話,a并不需要主動擷取b,而是由其它人自動将b送上門來。

        形象的舉例就是:

        通常情況下,假如你有一天在家裡口渴了,要喝水,那麼你可以到你小區的小賣部去,告訴他們,你需要一瓶水,然後小賣部給你一瓶水!這本來沒有太大問題,關鍵是如果小賣部很遠,那麼你必須知道:從你家如何到小賣部;小賣部裡是否有你需要的水;你還要考慮是否開着車去;等等等等,也許有太多的問題要考慮了。也就是說,為了一瓶水,你還可能需要依賴于車等等這些交通工具或别的工具,問題是不是變得複雜了?那麼如何解決這個問題呢?

        解決這個問題的方法很簡單:小賣部提供送貨上門服務,凡是小賣部的會員,你隻要告知小賣部你需要什麼,小賣部将主動把貨物給你送上門來!這樣一來,你隻需要做兩件事情,你就可以活得更加輕松自在:

        第一:向小賣部注冊為會員。

        第二:告訴小賣部你需要什麼。

        這和spring的做法很類似!spring就是小賣部,你就是a對象,水就是b對象

        第一:在spring中聲明一個類:a

        第二:告訴spring,a需要b

        假設a是useraction類,而b是userservice類

談談Spring中的IOC和AOP概念

<bean id="userservice" class="org.leadfar.service.userservice"/>  

<bean id="documentservice" class="org.leadfar.service.documentservice"/>  

<bean id="orgservice" class="org.leadfar.service.orgservice"/>  

<bean id="useraction" class="org.leadfar.web.useraction">  

     <property name="userservice" ref="userservice"/>  

</bean>  

        在spring這個商店(工廠)中,有很多對象/服務:userservice,documentservice,orgservice,也有很多會員:useraction等等,聲明useraction需要userservice即可,spring将通過你給它提供的通道主動把userservice送上門來,是以useraction的代碼示例類似如下所示:

談談Spring中的IOC和AOP概念

package org.leadfar.web;  

public class useraction{  

     private userservice userservice;  

     public string login(){  

          userservice.valifyuser(xxx);  

     }  

     public void setuserservice(userservice userservice){  

          this.userservice = userservice;  

}  

        在這段代碼裡面,你無需自己建立userservice對象(spring作為背後無形的手,把userservice對象通過你定義的setuserservice()方法把它主動送給了你,這就叫依賴注入!),當然咯,我們也可以使用注解來注入。spring依賴注入的實作技術是:動态代理

2. aop:即面向切面程式設計

        面向切面程式設計的目标就是分離關注點。什麼是關注點呢?就是你要做的事,就是關注點。假如你是個公子哥,沒啥人生目标,天天就是衣來伸手,飯來張口,整天隻知道玩一件事!那麼,每天你一睜眼,就光想着吃完飯就去玩(你必須要做的事),但是在玩之前,你還需要穿衣服、穿鞋子、疊好被子、做飯等等等等事情,這些事情就是你的關注點,但是你隻想吃飯然後玩,那麼怎麼辦呢?這些事情通通交給别人去幹。在你走到飯桌之前,有一個專門的仆人a幫你穿衣服,仆人b幫你穿鞋子,仆人c幫你疊好被子,仆人c幫你做飯,然後你就開始吃飯、去玩(這就是你一天的正事),你幹完你的正事之後,回來,然後一系列仆人又開始幫你幹這個幹那個,然後一天就結束了!

        aop的好處就是你隻需要幹你的正事,其它事情别人幫你幹。也許有一天,你想裸奔,不想穿衣服,那麼你把仆人a解雇就是了!也許有一天,出門之前你還想帶點錢,那麼你再雇一個仆人d專門幫你幹取錢的活!這就是aop。每個人各司其職,靈活組合,達到一種可配置的、可插拔的程式結構。

轉載:http://blog.csdn.net/eson_15/article/details/51090040