在上篇部落格中,大家和我一起研究了aop的基本實現,但是,也給大家遺留了很多問題,在這篇部落格,咱們一起研究如何針對這些問題進行持續的優化,看看在咱們的手裡,aop會成長為乙個什麼樣的東西!
看看上篇部落格中,咱們一起實現的aop類圖:
咱們看看在cglib類裡的問題
public class cglibdynamicproxy implements methodinterceptor
public static cglibdynamicproxy getinstance()
@suppresswarnings("unchecked")
public t getproxy(classcls)
@override
public object intercept(object target, method method, object args, methodproxy proxy) throws throwable
private void before()
private void after()
}
這樣我們的擴充套件就會變得困難,大家試想一下這個場景,我們寫好的業務,需要增加乙個功能,就要寫乙個**類,功能的變化,也必須修改**,這就給我們的**維護帶來了很大的負擔!如果我們要第一次要擴充套件2個方法,寫了**,下一次擴充套件3個,寫了**,下一次擴充套件1個寫了**,下一次不想要第一次的第2個方法了,怎麼辦?的確,這樣的維護,是我們不想看到的,所以,我們將擴充套件的公共服務放到了乙個容器中,大家看類圖:
* 將服務進行封裝
*/public class proxymehds
} catch (exception ex)
} // 用於遍歷之後執行的方法
public void afterbean()
} catch (exception ex)
} public hashmapgetbeforbeans()
public void setbeforbeans(hashmapbeforbeans)
public hashmapgetafterbeans()
public void setafterbeans(hashmapafterbeans)
public hashmapgetbeformethods()
public void setbeformethods(hashmapbeformethods)
public hashmapgetaftermethods()
public void setaftermethods(hashmapaftermethods)
}
public class cglibdynamicproxy implements methodinterceptor
public static cglibdynamicproxy getinstance()
@suppresswarnings("unchecked")
public t getproxy(classcls)
@override
public object intercept(object target, method method, object args,
methodproxy proxy) throws throwable
public proxymehds getproxymehds()
public void setproxymehds(proxymehds proxymehds)
}
public class aspectclassone
}
public class aspectclasstwo
}
public class aspectclassthree
}
public class aspectclassfour
}
public inte***ce greeting
public class greetingimpl implements greeting
}
public class client
}
1.7 參考部落格
這樣封裝之後的好處是什麼呢,就是我們的服務不再固定,而是在**中定義了乙個空殼子,這樣每次使用,都是復用的空殼子,也是我們常說的框架,而後期的服務類是後加入的,在客戶端動態初始化制定的,這樣我們的擴充套件就變得方便,寫好乙個類,我們就可以直接配置下xml(類似於客戶端的組裝)就可以實現這樣的功能!讓功能的擴充變得簡單! AOP解密 實時動態AOP
在上篇部落格中個,咱們一起組建了乙個容器,裡面封裝了業務,這樣,咱們就將業務和服務的組裝放到了客戶端,而客戶端就相當於咱們的開發中使用到的配置檔案,大家發現問題了嗎?就是我不能動態改動了?業務容器在 完成後,重新新增乙個業務類,這時候,是不被允許的,那這個容器就是個編譯時起作用的容器,他就喪失了很多...
AOP解密加密介面要點記錄
專案背景 需要對專案的前後端進行加密傳輸,後台統一處理,此時我們經常會用到spring的aop,方便快捷,以下為書寫過程中的記錄以及總結。專案環境 springboot 說明 前台加解密,以及後台加解密過程忽略,各位大佬根據自己專案書寫即可。主要業務 如下 pointcut annotation c...
AOP簡介AOP是什麼?
aop是什麼?aspect oriented programming aop 從名字上說類似oop object oriented programming。aop是oop的延續,是aspect oriented programming的縮寫,意思是面向方面程式設計。而什麼是方面哪?方面也可以認為是關...