Kakšna je vloga ClassLoaderja v Javi?



Ta članek je izčrpen vodnik o tem, kako ClassLoader deluje v Javi. Razpravlja o vrstah, načelih in metodah ClassLoader v Javi.

Med delom v Javi pogosto uporabljamo veliko število predavanj. Ti razredi Java se ne naložijo naenkrat v pomnilnik, temveč se naložijo, kadar to zahteva aplikacija. Tu nastopi Java ClassLoaders. V tem članku bom torej razložil, kako uporabljati ClassLoader v Javi, skupaj s primeri.

V tem članku bodo obravnavane naslednje teme:





  1. Kaj je ClassLoader?
  2. Vrste ClassLoader
  3. Načela ClassLoader
  4. Metode ClassLoader
  5. Po meri ClassLoader

Začnimo!

Kaj je ClassLoader v Javi?

Izvajalno okolje Java pokliče ClassLoader v Javi, da dinamično naloži razrede, kadar koli to zahteva aplikacija v Navidezni stroj Java . Ker so ClassLoaders del Java Runtime Environment, navidezni stroj Java ne bo imel pojma o osnovnih datotekah in datotečnih sistemih.



Zdaj pa razumimo različne vrste vgrajenih ClassLoaders v Javi.

Vrste ClassLoader v Javi

Različne vrste ClassLoaders v Javi so naslednje:

Pogovorimo se o vsakem posebej.



Razširitev ClassLoader

Kot že ime pove, Extension ClassLoader naloži razširitve osnovnih razredov Java iz JDK Knjižnica razširitev. Je podrejen Bootstrap ClassLoader in nalaga razširitve iz imenika JRE / lib / text ali katerega koli drugega imenika, navedenega v sistemski lastnosti java.ext.dirs.

Program ali sistem ClassLoader

Aplikacija ali sistem ClassLoader je podrejena razširitvi ClassLoader. Ta vrsta ClassLoader naloži vse razrede ravni aplikacije, ki jih najdete v možnosti ukazne vrstice -cp ali v spremenljivki okolja CLASSPATH.

Bootstrap ClassLoader

Kot vsi to vemo Razredi Java naloži primerek java.lang.ClassLoade. Ker pa so ClassLoaders razredi, je Bootstrap ClassLoader odgovoren za nalaganje internih razredov JDK. BootStrap ClassLoader je strojna koda, ki zažene operacijo, ko jo pokliče JVM, in naloži razrede iz rt.jar. Torej, razumete lahko, da strežnik Bootstrap ClassLoader nima nadrejenega ClassLoader in je zato znan kot Primordial ClassLoader.

Opomba: Prednost Bootstrapa je višja od razširitve in prednost, dodeljena razširitvi ClassLoader, je višja od aplikacije ClassLoader. Glejte spodnjo sliko:

Vrste ClassLoader - ClassLoader v Javi - Edureka

Nato v tem članku naj razumemo načela, na katerih deluje ClassLoader.

Načela ClassLoader v Javi

Nabor pravil, na podlagi katerih deluje Java ClassLoader, je naslednja tri načela:

Dovolite nam, da razumemo vsakega posebej.

Edinstvenost

Ta lastnost zagotavlja, da se razredi ne ponavljajo in so vsi razredi unikatni. Lastnost edinstvenosti zagotavlja tudi, da razredov naloži nadrejeni ClassLoader in ne naloži podrejeni ClassLoader. V primeru, ko nadrejeni ClassLoader ne najde razreda, ga bo trenutni primerek poskusil narediti sam.

Model delegiranja

ClassLoader v Javi deluje na podlagi nabora operacij, ki ga poda model delegiranja. Torej, kadar koli se ustvari zahteva za iskanje razreda ali vira, bo primerek ClassLoader iskanje razreda ali vira prenesel na nadrejeni ClassLoader.

kdaj uporabiti to

Nabor operacij, na podlagi katerih deluje ClassLoader, je naslednji:

  • Navidezni stroj Java preverja, ali je razred naložen ali ne, kadar koli pride do razreda.
  • V primeru, ko je razred naložen JVM nadaljuje z izvajanjem razreda, vendar v primeru, ko razred ni naložen, potemJVM prosi podsistem Java ClassLoader, da naloži določen razred. Po tem podsistem ClassLoader daje nadzor aplikaciji ClassLoader.
  • Nato Application ClassLoader zahtevo prenese na razširitev ClassLoader, ki nato pošlje zahtevo Bootstrap ClassLoader.
  • Zdaj Bootstrap ClassLoader išče vBootstrap classpath, da preverite, ali je razred na voljo ali ne. Če je razred na voljo, se nato naloži, sicer pa se zahteva znova posreduje razširitvi ClassLoader.
  • Razširitev ClassLoader preveri, ali je razred na poti do razreda razširitve.Če je razred na voljo, se nato naloži, sicer se zahteva znova posreduje aplikaciji ClassLoader.
  • Nazadnje Application ClassLoader išče razred na poti do razreda aplikacije.Če je razred na voljo, je nato naložen, sicer boste videli izjemo ClassNotFoundException.

Glejte spodnjo sliko.

Načelo vidnosti

V skladu s tem načelom so razredi otrok vidni razredom, ki jih naložijo njegovi nadrejeni ClassLoaders, vendar obratno ni res. Torej, razredi, ki jih naloži Application ClassLoader, imajo vpogled v razrede, ki jih nalagata Extension in Bootstrap ClassLoader.

Če imamo na primer dva razreda: A & B, predpostavimo, da razred A naloži Application ClassLoader, razred B pa Extensions ClassLoader. Tu sta razreda A in B vidna vsem razredom, ki jih naloži Application ClassLoader, razred B pa samo tistim razredom, ki jih naloži Extension ClassLoader.

Če poskusite naložiti te razrede z uporabo Bootstrap ClassLoader, boste videli java.lang.ClassNotFoundException . izjema.

V redu, zdaj, ko poznate vrste ClassLoaders in načela, ki temeljijo na njih, si oglejmo nekaj pomembnih metodIz java.lang.ClassLoader razred.

Metode ClassLoader v Javi

Nekaj ​​bistvenih ClassLoader so naslednji:

loadClass (Ime niza, logična razrešitev)

Ta metoda je vstopna točka ClassLoader in se uporablja za nalaganje razreda, na katerega se sklicuje JVM. Vzame ime kot parameter. JVM prikliče metodo loadClass () za razrešitev sklicev na razred z nastavitvijo logične vrednosti na true. Samo če moramo ugotoviti, ali razred obstaja ali ne, je logični parameter nastavljen na false.

Izjava:

javni razred loadClass (ime niza, logična razrešitev) vrže ClassNotFoundException {

defineClass ()

Končna metoda, ki se uporablja za definiranje niza bajtov kot primerek razreda. V primeru, da je razred nato neveljaven, vrže ClassFormatError.

Izjava:

zaščiten končni razred defineClass (ime niza, bajt [] b, int off, int len) vrže ClassFormatError

findClass (ime niza)

Za iskanje določenega razreda se uporablja metoda findClass. Torej preprosto najde razred s polno kvalificiranim imenom kot parameter, vendar razreda ne naloži. Način loadClass () prikliče to metodo, če nadrejeni ClassLoader ne najde zahtevanega razreda. Če noben od staršev ClassLoader ne najde razreda, privzeta izvedba vrže a ClassNotFoundException.

Izjava:

zaščiten razred findClass (ime niza) vrže ClassNotFoundException

Class.forName (Ime niza, logična inicializacija, nalagalnik ClassLoader)

Ta metoda se uporablja za nalaganje in inicializacijo razreda. Omogoča izbiro katerega koli od ClassLoaders in, če je parameter ClassLoader NULL, potem se samodejno uporabi Bootstrap ClassLoader.

Izjava:

javni statični razred forName (ime niza, logična inicializacija, nalagalnik ClassLoader) vrže ClassNotFoundException

getParent ()

Metoda getParent se uporablja za vrnitev nadrejenega ClassLoaderja za prenos.

Izjava:

javni končni ClassLoader getParent ()

getResource ()

Kot že ime pove, je metoda getResource () poskušala najti vir z danim imenom. Prvotno bo zahtevo prenesel v nadrejeni ClassLoader za vir. Če je nadrejena vrednost nična, se poišče pot ClassLoader, vgrajenega v JVM. Če to ne uspe, bo metoda za iskanje vira poklicala findResource (String), kjer je ime vira določeno kot vhod, ki je lahko absolutna ali relativna pot razreda. Nato vrne objekt URL za branje vira ali vrne ničelno vrednost, če vir nima ustreznih pravic za vrnitev vira ali ga ni mogoče najti.

Izjava:

javni URL getResource (ime niza)

Nato nam v tem članku o ClassLoader v Javi pojasnite CustomLoader po meri.

Po meri ClassLoader v Javi

Vgrajeni ClassLoaders bodo poskrbeli za večino primerov, ko so datoteke že v datotečnem sistemu, če pa želite razrede naložiti z lokalnega trdega diska, morate uporabiti ClassLoaders po meri.

Ustvari ClassLoader po meri

Če želite ustvariti ClassLoader po meri, morate razširiti ClassLoader razred in preglasite findClass () metoda:

Primer: Ustvarimo ClassLoader po meri, ki razširi privzeti ClassLoader in iz podane datoteke naloži bajtno matriko. Glejte spodnjo kodo.

hash map vs hash table
paket edureka import java.io.ByteArrayOutputStream import java.io.File import java.io.IOException import java.io.InputStream public class Sample extends ClassLoader {@Override public Class findClass (String samplename) vrže ClassNotFoundException {byte [] (samplename) return defineClass (samplename, b, 0, b.length)} zasebni bajt [] customLoadClassFromFile (String demofilename) {InputStream inStream = getClass (). getClassLoader (). getResourceAsStream (demofile.replace ('.', File. separatorChar) + '.class') byte [] buffer ByteArrayOutputStream bStream = new ByteArrayOutputStream () int nextValue = 0 try {while ((nextValue = inStream.read ()) = -1) {bStream.write (nextValue)}} catch (IOException e) {e.printStackTrace ()} buffer = bStream.toByteArray () return buffer}}

S tem smo zaključili ta članek o ClassLoaderju v Javi. Upam, da ste razumeli, kaj so ClassLoaders v Javi, njene metode, različne vrste ClassLoaders itd.

Če ste našli ta članek o »ClassLoader v Javi«, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, ki se širijo po vsem svetu. Tu smo, da vam pomagamo pri vsakem koraku na poti, saj smo poleg tega vprašanja za java intervjuji pripravili učni načrt, ki je namenjen študentom in strokovnjakom, ki želijo Java Razvijalec.

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega »ClassLoaderja v Javi ' in se vam bomo javili v najkrajšem možnem času.