posts - 8, comments - 13, trackbacks - 0, articles - 43
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          AOP,全稱Aspect Oriented Programming,面向方面的編程。那么就要問了,什么是方面,為什么引入AOP?
          一般情況下,OOP能夠很好的避免代碼重復(fù)。具體繼承可以幫助我們?cè)诓煌愋椭g共享相同的行為;多態(tài)讓我們可以用同樣的方式處理不同類型的對(duì)象,將注意力集中在它們的共同之處。但是,有些時(shí)候,OOP也避免不了代碼的重復(fù),比如下面的例子:

          public class MyBusinessObject extends BusinessObject {
           
              
          public void businessMethod1() throws UnanthorizedException {
                  doSecurityCheck();
              }


              
          public void businessMethod2() throws UnanthorizedException {
                  doSecurityCheck();
              }

                 
              
          public void businessMethod3(){
                  
          //do not need check security.
              }



              
          protected void doSecurityCheck() throws UnanthorizedException {
                  
          //implement the security check.
              }

          }


          上面是安全性檢查的例子,我們希望檢查用戶是否有權(quán)限執(zhí)行某個(gè)方法,如果沒有就拋出異常。我們把安全檢查的工作放在一個(gè)方法中實(shí)現(xiàn),但是這個(gè)仍無法避免一行重復(fù)代碼的編寫。另外,當(dāng)開發(fā)者添加一個(gè)新的業(yè)務(wù)方法時(shí),它完全有可能忘記調(diào)用安全檢查的方法,從而破壞了應(yīng)用程序的安全性。為了在方法執(zhí)行的過程中識(shí)別出“應(yīng)該調(diào)用安全性檢查”的那一點(diǎn),我們需要用一種高全新的方式來看待程序結(jié)構(gòu),而OO的層次模型無法提供這種新的視角。對(duì)于這個(gè)問題,繼承愛莫能助,“安全性檢查”在這里是一個(gè)具有橫切性的問題,需要進(jìn)行安全性檢查的方法都是彼此獨(dú)立的,無法從某個(gè)通用的方法繼承下去。
          AOP的目標(biāo)就是將橫切型crosscutting的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。在AOP中,我們可以單獨(dú)編寫“安全性檢查”的代碼,并將其包裝為一個(gè)方面aspect。(方面的概念出現(xiàn)嘍!)然后,我們可以告訴AOP實(shí)現(xiàn)產(chǎn)品如何在運(yùn)行時(shí)將方面織入到程序流程之中,具體的實(shí)現(xiàn)策略,請(qǐng)看下篇AOP的實(shí)現(xiàn)策略。


           


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 衡水市| 麦盖提县| 平湖市| 玛纳斯县| 襄城县| 云和县| 长乐市| 金平| 长阳| 普洱| 宁化县| 武功县| 沈阳市| 江永县| 巴马| 平潭县| 鱼台县| 凤翔县| 正蓝旗| 铁岭县| 南召县| 上饶县| 武鸣县| 江油市| 米易县| 连平县| 谷城县| 龙口市| 朝阳县| 丹东市| 台中县| 林芝县| 南雄市| 永和县| 玉龙| 新邵县| 九龙城区| 玛沁县| 松溪县| 临猗县| 兴安县|