-Djava.endorsed.dirs 作用

關於endorsed:可以的簡單理解爲-Djava.endorsed.dirs指定的目錄面放置的jar文件,將有覆蓋系統API的功能。可以牽強的理解爲,將自己修改後的API打入到JVM指定的啓動API中,取而代之。但是能夠覆蓋的類是有限制的,其中不包括java.lang包中的類。

 

比如Java的原生api不能滿足需求,假設我們需要修改 ArrayList 類,由於我們的代碼都是基於ArrayList做的,那麼就必需用到 Java endorsed 技術,將我們自己的ArrayList,注意包和類名和java自帶的都是一樣的,打包成一個jar包,放入到-Djava.endorsed.dirs指定的目錄中,這樣我們在使用java的ArrayList的時候就會調用的我們定製的代碼中,是不是很酷!!

根據官方文檔描述:如果不想添加-D參數,如果我們希望基於這個JDK下的都統一改變,那麼我們可以將我們修改的jar放到:

$JAVA_HOME/jre/lib/endorsed

這樣基於這個JDK的所有的ArrayList都改變了!

注意:

  1. 能夠覆蓋的類是有限制的,其中不包括java.lang包中的類,比如java.lang.String這種 就不行
  2. endorsed目錄:.[jdk安裝目錄]./jre/lib/endorsed,不是jdk/lib/endorsed,目錄中放的是Jar包,不是.java或.class文件,哪怕只重寫了一個類也要打包成jar包
  3. 可以在dos模式查看修改後的效果(javac、java),在eclipse需要將運行選項中的JRE欄設置爲jre(若設置爲jdk將看不到效果)。
  4. 重寫的類必須滿足jdk中的規範,例如:自定義的ArrayList類也必須實現List等接口。
  5. System.out.println(System.getProperty("java.endorsed.dirs"));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章