Vorwort
Kürzlich haben wir der Sicherungskomponente eine Downgrade -Strategie hinzugefügt (Hystrix scheint diese Konfiguration nicht zu haben) und wir stellen die folgenden Strategien an:
1. Standardrichtlinie
2. Rückgabekonstantwert
3. Werfen Sie eine bestimmte Ausnahme aus
4. Führen Sie ein grooviges Skript aus
Natürlich können diese Konfigurationen auf der Plattform konfiguriert und sofort wirksam werden.
Die aktuelle Implementierung der Rückgabe konstanter Werte lautet wie folgt:
Heute stellte ich fest, dass, wenn das gleiche Objekt jedes Mal zurückgegeben wird und diese Logik eine schwarze Box für das Unternehmen ist (das Unternehmen weiß nicht, dass das Objekt, das jedes Mal erhalten wurde, gleich ist). Um die Schuld zu vermeiden, müssen wir jedes Mal ein neues Objekt zurückgeben. Die erste Reaktion ist, ob es durch Klon machbar ist (da jede JS -Serialisierung auch die Leistung verliert), aber die mit JDK gelieferte Klonmethode ist nur ein flacher Klon. Wenn das Objekt ein anderes komplexes Objekt enthält, besteht das vom Klon abgeleitete Objekt immer noch das Risiko, geändert zu werden.
Detaillierte Einführung:
Sie können das folgende Beispiel sehen:
Klasse Master {String Name; public Master (Zeichenfolge Name) {this.name = name; }}Initialisieren Sie eine Meisterklasse
Class Dog implementiert klonbares {String -Name; int Alter; Meister; öffentlicher Hund (String -Name, int Alter, Master Master) {this.name = name; this.age = Alter; this.master = Master; } @Override protected Object Clone () löscht ClonenotsuptedEdException {return Super.clone (); } @Override public String toString () {return "{name:" + name + ", Alter:" + age + ", master:" + master.name + "}"; }}Einen Hund initialisieren
public static void main (String [] args) löst eine Ausnahme aus (Master Master = New Master ("Zj0"); Dog Dog1 = neuer Hund ("Wangcai", 1, Master); Dog Dog2 = (Hund) hunde1.clone (); Dog1.Name = "Billy"; Dog1.Master.Name = "Zj1"; System.out.println (Dog2);}Schließlich leiten Sie es aus, das Ergebnis lautet wie folgt:
{Name: 王彩, Alter: 1, Master: Zj1}Dog1 ist ein primitiver Hund, Dog2 ist geklont, aber wenn ich den Namen des Meisters von Dog1 ändere, hat sich auch der geklonte Meister geändert, was offensichtlich nicht funktioniert.
Obwohl ich immer gewusst habe, dass die Klonmethode des Objekts ein flacher Klon ist und ich ihn nicht weiter erkundet habe. Heute bin ich darauf gestoßen und habe mich die Implementierung von JVM angesehen. Es scheint sehr einfach. Suchen Sie in der JVM.CPP -Datei nach "JVM_Clone".
Ich habe die Klonmethode noch nie verwendet. Über den Quellcode stellte ich fest, dass ich beim Ausführen überprüfe, ob die Klasse die klonbare Schnittstelle implementiert. Ich überprüfe es während der Zusammenstellung nicht. Was denke ich?
Öffnen Sie gemäß der Größe des Objekts oder der Daten einen Speicher der gleichen Größe vom Heap und kopieren Sie dann die Daten des ursprünglichen Objekts in die neue Speicheradresse. Für Grundtypen kann der ursprüngliche Wert kopiert werden, aber für interne Objekte speichert er nur eine Adresse und ist auch eine Kopie der Adresse während des Kopierens und weist letztendlich auf dasselbe Objekt hin, was die oben genannten Probleme verursacht.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.