Dieser Artikel stellt Ihnen hauptsächlich die relevanten Informationen darüber vor, wie Java die von jdk bereitgestellten Klassen abdeckt. Der Artikel stellt ihn ausführlich anhand von Beispielcodes vor. Er hat einen gewissen Referenzlernwert für alle, die lernen oder arbeiten Brauchen Sie es? Lassen Sie uns gemeinsam mit dem Herausgeber unten lernen.
Vorwort
Als wir zuvor die Prinzipanalyse von Tomcat catalina.bat analysierten, stellten wir fest, dass es einen -Djava.endorsed.dirs
-Parameter im gibt Parameter zum Starten von Tomcat
Wie unten gezeigt:
-Djava.endorsed.dirs
Java bietet empfohlene Technologie:
Über empfohlen: Es kann einfach als eine JAR-Datei verstanden werden, die in dem durch -Djava.endorsed.dirs
angegebenen Verzeichnis abgelegt wird und die Funktion hat der Abdeckung der System-API. Allerdings gibt es Einschränkungen hinsichtlich der abdeckbaren Klassen, die (aus Sicherheitsgründen) keine Klassen im java.lang-Paket enthalten.
Warum muss „endorsed“ verwendet werden, um Klassen in JDK zu ersetzen?
Weil Java den übergeordneten Delegationsmechanismus zum Laden von Klassen verwendet. Die von jdk bereitgestellten Klassen können nur vom Klassenlader Bootstrap geladen werden. Wenn Sie in Ihrer Anwendung eine bestimmte Klasse in JDK ersetzen möchten, ist dies nicht möglich. Daher bietet Java die Möglichkeit, die Klasse zu erreichen, die Sie im System ersetzen möchten.
Beispiel
Ändern Sie die Methode java.util.ArrayList
in der Klasse get(int index)
und fügen Sie die in der Methode erhaltenen Ausgabewertinformationen hinzu, wenn The Die Zeichenfolge wird direkt ausgegeben. Wenn nicht, werden die Klasseninformationen ausgegeben und der Klassenlader der Elementklasse geladen. Der Code lautet wie folgt:
Packen Sie dann die JAR-Datei und legen Sie sie in einem Verzeichnis ab.
Ich habe es hier im Verzeichnis „D:endorsed“ abgelegt
Testklasse
public class Bootstrap { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(10); for(int i=0;i<10; i++){ list.add("test"+i); list.get(i); } } }
um es auszuführen, wann Hinzufügen des Parameters -Djava.endorsed.dirs=D:endorsed
. Wie unten gezeigt:
Laufergebnisse
Anhand der Ergebnisse haben wir festgestellt, dass die gedruckten Informationen nicht der Fall sind Unser Programm Was ausgegeben wird, ist das, was in der Methode ArrayList.get()
gedruckt wird.
empfohlen Eine andere Änderungsmethode
Laut der offiziellen Dokumentbeschreibung: Wenn Sie den Parameter -D nicht hinzufügen möchten, wenn wir Ich möchte es auf diesem JDK basieren. Wenn alle einheitlich geändert werden, können wir unsere geänderten Gläser in Folgendes einfügen:
$JAVA_HOME/jre/lib/endorsed
Auf diese Weise basieren alle ArrayLists an diesem JDK haben sich geändert! ! !
Zusammenfassung
Das obige ist der detaillierte Inhalt vonSo verwenden Sie „Empfohlen in Java', um Instanzen von Klassen zu überschreiben, die von JDK bereitgestellt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!