1. 程式人生 > >實現Tomcat熱更新部署

實現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