- Tomcat crea un nuovo caricatore di classi per ogni applicazione Web.
- Quindi, se la classe Singleton è memorizzata in un file di guerra, lo stesso file di guerra avrà due istanze nel contenitore Tomcat, ovvero crea due classi Singleton separate per ciascun file di guerra.
- Se la classe Singleton si trova nel percorso della libreria di condivisione di Tomcat, Tomcat crea solo un'istanza Singleton per entrambe le applicazioni.
JVM analogia:
JVM è come grande villa. Contiene famiglia combinata con applicazioni e librerie server.
I ClassLoaders sono membri della famiglia, ogni membro della famiglia rappresenta un ClassLoader (funziona come gerarchia dei delegati e non gerarchia di eredità). Nota: ClassLoader è di classe, può creare più istanze.
Le applicazioni sono come un elettrodomestico. per esempio: lavatrice, frigorifero, aria condizionata, telivisione, tavolo da pranzo, divano e così via ...
Le biblioteche sono tutte dotate di una propria biblioteca personale. Ognuno cerca nel liberatore del genitore se non lo trova, quindi cerca nella sua biblioteca.
limitazioni: Se il padre compra un elettrodomestico, i suoi figli possono usarlo, ma non può essere utilizzato dal genitore e dalle sibilazioni. Ogni applicazione potrebbe utilizzare versioni diverse delle stesse librerie. Ad esempio, se la libreria contiene due o più versioni di uno stesso libro, sceglie prima quale libro è disponibile.
Ogni numero di famiglia può utilizzare solo un dispositivo univoco.
In casa, è possibile utilizzare l'appliance mulitple della stessa versione. Quindi, JVM ci consente di eseguire più applicazioni delle stesse versioni.
Garbage Collector è un servitore di Mansion, che si aggira come un daemon, che può cancellare qualsiasi tipo di oggetto.
L'ambito di una variabile statica è limitato a uno per ClassLoader.
@Evgenniy, Ciò significa che nella mia singola applicazione posso creare 2 oggetti singleton utilizzando caricatori di classi diverse (solo un pensiero). ?? – Learner
Sì, crea 2 classloader (puoi utilizzare URLClassLoader), carica la stessa classe con ClassLoader.loadClass (className) - otterrai 2 diverse istanze di classe –
Significa che Singleton è danneggiato? – Learner