實現Tomcat熱更新部署

插件式的架構可以爲系統帶來極高的擴展性。典型的一個例子就是eclipse。我們可以下載各種各樣的插件來不斷豐富eclipse的功能,而eclipse本身卻不需要作任何改動。那麼在Java中如何實現插件機制呢?

動態加載

實現插件式系統的基礎是動態加載機制。所謂動態加載是指系統所要用到的字節碼文件不需要添加classpath目錄下,而在運行時由程序本身根據需要加載到jvm中。這種情況下相應的jar包可以放在任意位置,甚至從網絡上獲取。jdk中的ClassLoader類爲我們提供了這一強大的特性。我們可以自定義一個子類來繼承ClassLoader類,從而實現一些自定義的需求,但不要輕易就重寫ClassLoader的方法,除非你對ClassLoader非常熟悉,並且有非這樣做不可的需求。在本文,我們可以直接使用了jdk自帶的URLClassLoader類來實現插件的動態加載。

URLClassLoader的構造函數原型爲:

public URLClassLoader(URL[] urls, ClassLoader parent)
1
1
第一個參數爲class文件或jar包的URL列表,大致可以理解爲class文件的地址,該地址可以是本地磁盤地址也可以是網絡地址。第二個參數爲父級ClassLoader,該參數我們一般都賦值爲調用者本身的ClassLoader。此處需要非常注意的是java中的類都是由classloader加載的,如果同一個class文件由不同的classloader加載,則被認爲是兩個class類型,他們的實例間也不能強制轉換。關於ClassLoader的更詳盡的講解可以參考這篇博文: 深入分析Java ClassLoader原理

動態加載類文件需要使用URLClassLoader類的loadClass方法,其原型爲:

public Class

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章