面向切面對象AOP

前言java

  面向切面編程(思想)AOP Aspect Oriented  Programming,是面向對象基礎上 更關注最終目標 而不關注中間的小目標,簡而言之,就是咱們的目標(例如constroller)觸發了咱們關注的方法,此時就執行咱們的觀察者行爲,例如在目標的方法觸發前作事,觸發後作事等等。spring

  爲了讓你們更好的理解,這裏把面向過程、面向對象先講解一遍。編程

 

面向過程編程(思想)POP學習

  Procedure  Oriented  Programming,面向過程編程思想(關注事情步驟,事情自己),將一件事情的總體看做是一個流程,咱們更關注事情的流程、步驟。好比我去超市買菜,我要下樓,等紅綠燈,走過幾條街道,進入超市選擇本身要的菜,而後排隊買單。我會關注這些過程要經歷的事件,步驟。this

 

面向對象編程(思想)OOPspa

  Object  Oriented  Programming,面向對象編程思想(關注中間有幾個對象參與其中),將原有總體事情的步驟,拆分紅小段,每個小段封裝成一個單獨的事情(方法),不一樣的方法交給不一樣的人來作,例如我去超市買菜,我在家裏出發,最終目的是在超市買菜,中間幾個環節交給不一樣的人(對象)來幫我作:下樓(被人揹下去),打車,選菜,排隊等等都有人幫我作,我只要把這些順序連起來,指揮不一樣的對象按照我要求的順序執行即可。代理

 

面向切面編程(思想)AOPcode

  Aspect Oriented  Programming,面向切面編程思想(面向對象基礎上 更關注最終目標 而不關注中間的小目標),但要注意切面自己也是對象,好比我去超市買菜,我爲起始對象,超市爲目標對象,在我到超市以前所經歷的事情都概括到切面對象(下樓,打車,選菜,排隊執行這些方法的人(對象)等等),鏈接點(管理切面對象中的方法按順序執行),代理對象負責管理這些切面對象,切點爲買菜(即在目標對象中觸發咱們關心的方法);xml

 

案例對象

  這裏就用js模擬了,js模擬簡單些,java模擬的話思路也是同樣的,並且java的spring自己用xml或註解就能夠了,這裏主要講思想

// 面向切面的方式
class agency{//能夠理解爲過濾器

  before(){
    console.log("走路去超市");
  }
  
  main(Func){//代理對象
    this.before();
    Func();
    this.after();
  }
  
  after(){
    console.log("走路回家");
  }

}

let agencyObj = new agency();//找代理,相似找人幫咱們買菜送上門,這方式好處在於其餘人還能夠找代理買傢俱,買學習用品等等,咱們生成了一次代理,而後傳不一樣的任務進去讓代理幫咱們執行
function  main(){
  money -= 55;
  console.log("買完菜,減去55元,還剩:"+money);
}
agencyObj.main(main);//結果同上

money = 100;
function  main2(){
  money -= 98;
  console.log("買日用品,減去98元,還剩:"+money);
}
agencyObj.main(main2);

  上面的before和after方法能夠當成過濾器,好比我要獲得的數據渲染前先解密,解密渲染後,部分數據用*替換這類場景。

 

思路

  面向切面的方式就是更注重結果而不注重中間實現的步驟,中間不管由多少個切面對象幫你作了事,都由一個代理對象來幫你管理執行,而咱們須要作的就是把要作的事告訴代理對象。固然面向切面的方式是否使用要根據業務場景來定,若是發現有多個方法中間須要執行的步驟流程一致,而這些方法只須要拿到通過這些步驟以後所獲得的結果,不關心中間發生了什麼,就使用面向切面的方式。

相關文章
相關標籤/搜索