AOP解密 深入再造AOP

2021-07-24 16:25:36 字數 2681 閱讀 2466

在上篇部落格中,大家和我一起研究了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的縮寫,意思是面向方面程式設計。而什麼是方面哪?方面也可以認為是關...