2012-05-31 11 views
7

Ultimamente mi sono imbattuto nell'API del programma di caricamento classe java personalizzato. Ho trovato un uso qui, kamranzafar's blog Sono un po 'nuovo al concetto di caricatore di classe. Qualcuno può spiegare in dettaglio, quali sono i diversi scenari in cui potremmo averne bisogno o dovremmo usarlo?A cosa serve Loader classe personalizzata

+0

Buon articolo per la scrittura di caricatori personalizzati. http://www.journaldev.com/349/java-classloader –

risposta

22

I caricatori di classe personalizzata sono utili in architetture più grandi composte da più moduli/applicazioni. Ecco i vantaggi del caricatore di classe personalizzata:

  • Fornisce architettura modulare Consente di definire più loader classe consentendo architettura modulare.
  • Evitare conflitti Definisce chiaramente l'ambito della classe all'interno del caricatore di classi.
  • Supporto Versioning Supporta diverse versioni di classe all'interno della stessa VM per diversi moduli.
  • Gestione della memoria migliore È possibile rimuovere i moduli non utilizzati che scaricano le classi utilizzate da quel modulo, che puliscono la memoria.
  • Classi di carico da qualsiasi luogo Le classi possono essere caricate da qualsiasi luogo, per ex, database, reti o addirittura definirlo al volo.
  • Aggiungi risorse o classi dinamicamente Tutte le funzionalità sopra elencate consentono di aggiungere classi o risorse in modo dinamico.
  • Runtime Ricaricamento classi modificate Consente di ricaricare un runtime di classi o classi creando un caricatore di classi figlio al caricatore di classi effettivo, che contiene le classi modificate.
+3

Un interessante (figo?) esempio di caricamento delle classi da qualsiasi luogo può essere visto qui: http://99-bottles-of-beer.net/language- java-1162.html – Crollster

+0

@Ramesh PVK grazie per la tua descrizione. ma è davvero ammirevole se puoi fornire alcuni codici di esempio per comprendere ciò che descrivi. spero che lo farai per chi come noi è interessato a java. –

11

L'utilizzo principale è nei server applicazioni in modo che possano eseguire due applicazioni e non avere conflitti di classi. Ad esempio, se l'applicazione 1 ha una classe con lo stesso nome dell'applicazione 2, con un'applicazione di caricamento classi personalizzata 1 caricherà la sua classe e l'applicazione 2 caricherà la sua classe.

Inoltre, se una classe viene caricata da un programma di caricamento classi personalizzato, è possibile scaricare tale classe dalla JVM. Di nuovo utile nei server delle applicazioni.

Un altro uso potrebbe essere per la strumentazione - Un modo di fare programmazione orientata all'aspetto o quando si utilizzano alcune API di persistenza. Con un classloader personalizzato è possibile aggiungere un comportamento alle classi caricate prima che vengano passate all'applicazione in esecuzione.

2

I programmi di caricamento classe Java eseguono praticamente ciò che suggerisce il nome: caricano le classi nella memoria in modo che possano essere utilizzate.

Le classi sono anche collegate al ClassLoader che le ha caricate.

caricamento classe personalizzata quindi aprire una varietà di possibilità interessanti:

  • Caricamento più versioni della stessa classe con differenti classloader (ad esempio per risolvere eventuali conficts delle versioni per esempio)
  • carico e scarico classi dinamicamente a runtime
  • Generazione di nuove classi (ad es.lingue JVM come Clojure usano vari trucchi classloading da generare nuove classi compilate per rappresentare le funzioni Clojure in fase di esecuzione)
  • classi di carico da fonti non standard

applicazioni normali Java di solito non hanno bisogno di preoccuparsi classloader. Ma se stai scrivendo un framework o una piattaforma che ha bisogno di ospitare altro codice, diventano molto più importanti/rilevanti.