不少時候 咱們寫的Java程序是分模塊的,有很好的擴展機制,即咱們能夠爲咱們本身的java類添加插件,來運行未來某天咱們可能開發出來的類,如下稱這些類爲插件類。java
下邊是一種簡單的實現方法:c++
Class A 做爲程序的主入口,其中包含了程序的執行入口(main)函數。而後在main函數中經過外部的配置文件,而後經過外部的配置文件,咱們能夠得到插件類的信息(位於哪一個jar包,jar包的具體路徑),而後得到jar包中某一個類的實例,來完成相應的工做。這個jar包極可能是外部的jar包,是咱們本身寫好的,那麼咱們放到哪裏,他才能本身找到呢?我嘗試過不少次,除非將其具體目錄,放到class_path中才能夠成功執行,不然報的異常只有一個ClassNotFoundException,就是找不到類。不過還有一種方法,就是將該jar包解壓到運行jar包所在的目錄,這樣就能夠經過class_path中的.來得到相應的類了。不過這樣會顯得很不專業,java寫出來的東西都是jar包啊,本身感受的。放到claspath中,不能每次寫出新的jar包都配置一遍吧!bootstrap
如此出現了以下的解決辦法:dom
想了解解決辦法的含義,首先要了解java的類加載機制。衆所周知,程序若想執行,必須加載到內存當中才能成功執行。java程序並非可執行文件,由許多獨立的類文件來完成。因此java中加載程序是以類爲單外來完成的。這也就須要咱們來簡單瞭解一下java的class loader加載機制。ide
java程序開始執行,遇到的第一個classloader是bootstrap classloader,這個classloader是用c++語言編寫,經過他來完成加載java中的核心類。第二個classloader是extension classloader,加載的是jre/lib目錄中的ext目錄中的jar包。而後第三個是system classloader,也被稱爲應用加載器,主要負責完成加載-classpath 或者系統中的全局變量ClassPath中的類。System.out.println(System.getProperty(「java.class.path」));能夠得到classpath的配置,也就是system classloader 加載的類,第四個class loader多是用戶自定義的加載器,來自定義加載類。一般一個類的加載過程是這樣的經過當前的類加載器的父加載器嘗試查找,若是沒有再找其父加載器嘗試加載,直到最終的bootstrap classloader爲止,若是尚未找到,那麼就開始從上往下加載類。這樣作的目的是防止自定義的類來覆蓋系統中的類,若是沒有這種機制很容易出現這種笑話,本身寫了一個String類,而後new string的時候是本身寫的String類,這樣就比較好玩了。函數
1.本身定義URLClassLoader對象加載外部jar包,針對jar包裏面再也不出現別的jar包的狀況,即只解析.class文件:學習
以上的這種狀況能夠在別的project項目裏寫test方法,是平時最經常使用的,若是當.class文件裏有依賴別的jar包裏的對象的時候,就要把該jar包拷貝到寫此測試方法的project並buildPath,否則的話運行的時候會報找不到Class對象的異常。測試
2.第二種狀況是針對加載jar包裏面的jar包的Class對象,還有讀取某一個properties文件的方法。ui
3.第三種狀況是在該項目下獲取某個包的Class對象,固然了,測試方法是在該項目下寫的(這樣classLoader就直接能夠知道對象了,不須要再自定義URLClassLoader了,用Thread.currentThread().getContextClassLoader().loadClass(.....)就能夠直接得到Class對象了,回去ClassPath下找,System.out.print(System.getProperty("java.class.path"))就能夠找到classPath路徑)。url
下面上第二段代碼
好了,大體就是這樣,好好學習,每天向上!哈哈~~
補充:
4.讀取jar包中的entity_pk.properties鍵值對到項目本地entity_pk.properties文件中
5.讀寫db_config.xml文件