爲什麼要使用ClassLoader? ClassLoader有什麼好處?

剛接觸ClassLoader,今天在鞏固概念的自我問答博弈中突然頓悟使用ClassLoader的好處,現就此記錄下

對於像我這樣剛接觸概念的初學者,看到如下可能沒啥感覺,都知道是如此

ClassLoader顧名思義,可以在程序運行的時候動態加載class文件,並在內存中生成對應的Class

但是自我博弈時改了下,變成如下

ClassLoader顧名思義,可以在服務器運行的時候動態加載class文件,並在內存中生成對應的Class

突然醍醐灌頂,服務器運行時動態加載... 嘶(吸氣聲),那不就意味着我可以不停機地動態加載新的業務類嗎?新的業務需求一出來,想把功能快速部署,但面對一堆用戶仍在開心地使用自己的服務,又不忍心重啓服務器編譯,這時ClassLoader不就派上用場了嗎?我把寫好的新業務java類編譯好,通過文件方式放到服務器業務相關目錄下,服務端暴露一個內部接口給客戶端(比如暴露一個Controller的request匹配給前端),我一調用接口,服務端就使用ClassLoader動態加載新業務class文件到內存,在內存端得到Class對象後就可以把對應的實例切到spring環境中,豈不美哉?

對於自己來說,原先寫的個人jar包裏的filter模塊,通過一個FilterManager管理各式各樣的filter,再用一個循環統一調用,實現filter之間的解耦和,爲了進一步解耦和,每個filter都會有一系列FilterHandle進行具體功能的組合(相當於一個技能有不同效果,不同效果之間可以組合)以實現進一步解耦和,至此,添加任何一個有關filter的新需求我都不需要改動任何代碼,所以是非常之適合ClassLoader的動態加載新業務,至此,ClassLoader就可以大放異彩了。

事實上,這便是ClassLoader一個重要作用:熱部署

發佈了38 篇原創文章 · 獲贊 42 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章