Hej tamo! Kao dobavljač utovarivača, dobio sam gomilu pitanja o svim vrstama utovarivača. Ali danas ću malo prebaciti brzinu i razgovarati o nečemu iz Java svijeta: učitavaču klasa. Sada, možda se pitate kakve veze ima utovarivač klase sa utovarivačima koje ja isporučujem, kao što su oniPotpuno hidraulični rovokopač-utovarivač,Mini utovarivač gusjeničar, i6tonski utovarivač na točkovima. Pa, sve se radi o konceptu "učitavanja", bilo da se radi o učitavanju fizičkih materijala ili učitavanju Java klasa.
Počnimo od osnova. U Javi, učitavač klasa je poput malog pomoćnika koji je odgovoran za učitavanje Java klasa u Java virtuelnu mašinu (JVM) tokom vremena izvršavanja. Vidite, Java je prilično kul jezik koji koristi funkciju koja se zove "dinamičko učitavanje klase". To znači da se klase ne učitavaju odjednom kada se program pokrene. Umjesto toga, oni se učitavaju samo kada su zaista potrebni. I tu dolaze utovarivači klasa.
U Javi postoje različite vrste učitavača klasa. Prvi je Bootstrap Class Loader. To je super - važno jer je napisano u izvornom kodu (poput C ili C++) i nalazi se na vrhu hijerarhije učitavača klasa. Odgovoran je za učitavanje najosnovnijih Java klasa, poput onih ujava.langpaket. Ovo su klase koje su JVM-u potrebne da bi ispravno funkcionirao od samog početka. Na primjer, theObjekatklasu, koja je korijen svih Java klasa, učitava Bootstrap Class Loader.
Sljedeći je učitavač Extension Class. Ovaj učitavač je napisan u Javi i učitava klase iz direktorija Java ekstenzija. Ovo su dodatne klase koje mogu proširiti osnovnu funkcionalnost Java platforme. Nalazi se odmah ispod Bootstrap Class Loader-a u hijerarhiji.
Zatim tu je učitavač klase sistema (također poznat kao učitavač klase aplikacije). Ovo je učitavač s kojim je poznata većina Java programera. Odgovoran je za učitavanje klasa iz putanje klase, koja je skup direktorija i JAR datoteka koje navedete kada pokrenete Java program. Ako pravite sopstvenu Java aplikaciju, klase koje pišete i kompajlirate obično će biti učitane pomoću System Class Loadera.
Proces učitavanja klase prati ono što se naziva "model delegiranja". Evo kako to funkcionira. Kada se od učitavača klasa traži da učita klasu, on ne pokušava odmah pronaći i učitati samu klasu. Umjesto toga, prvo delegira zahtjev svom učitavaču roditeljske klase. Dakle, ako učitavač klase sistema dobije zahtjev za učitavanje klase, on će taj zahtjev proslijediti utovarivaču klase proširenja, a učitavač klase proširenja će ga proslijediti učitavaču klase za pokretanje.
Učitavač roditeljske klase tada pokušava pronaći i učitati klasu. Ako ne može pronaći klasu, proslijedit će zahtjev natrag dolje učitavaču klasa. Ovaj proces se nastavlja sve dok se ili klasa ne učita ili dok svi učitavači klasa u hijerarhiji nisu uspjeli pronaći klasu. Ovaj model pomaže da se osigura da se klase učitavaju na dosljedan i siguran način. Na primjer, sprječava učitavanje više kopija iste klase od strane različitih učitavača klasa, što bi moglo uzrokovati razne vrste problema u JVM-u.
Još jedna dobra stvar u vezi sa učitavačima klasa je to što se mogu koristiti za kreiranje različitih "verzija" klasa u istom JVM-u. To se zove "klasna izolacija". Ovo će vam možda trebati u situaciji kada imate različite dijelove vaše aplikacije koji se oslanjaju na različite verzije iste biblioteke. Koristeći prilagođene učitavače klasa, možete učitati različite verzije istih klasa u zasebne "prostore za učitavanje klasa", tako da ne ometaju jedna drugu.
Sada, hajde da pričamo o prilagođenim učitavačima klasa. Kao programer, možete kreirati vlastite učitavače klasa podklasiranjemClassLoaderklasa u Javi. Učitavači prilagođenih klasa korisni su u mnogim scenarijima. Na primjer, možda ćete htjeti učitati klase iz mrežnog izvora ili iz prilagođenog formata datoteke. Možda radite na sistemu dodataka za svoju aplikaciju i želite da omogućite korisnicima da dodaju vlastitu funkcionalnost ubacivanjem datoteka prilagođenih klasa. Prilagođeni učitavač klasa može upravljati učitavanjem tih klasa gdje god da su pohranjene.
Evo jednostavnog primjera kako možete kreirati prilagođeni učitavač klasa:
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; javna klasa MyClassLoader proširuje ClassLoader { @Override zaštićenu klasu<?> findClass(String name) izbacuje ClassNotFoundException { String fileName = name.replace('.', File.separatorChar) + ".class"; try { File classFile = new File(fileName); FileInputStream fis = novi FileInputStream(classFile); ByteArrayOutputStream bos = new ByteArrayOutputStream(); bajt[] bafer = novi bajt[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead); } fis.close(); byte[] classBytes = bos.toByteArray(); return defineClass(name, classBytes, 0, classBytes.length); } catch (IOException e) { throw new ClassNotFoundException(name, e); } } }
U ovom primjeru, kreiramo prilagođeni učitavač klasa koji učitava klase iz lokalnog sistema datoteka. ThefindClassmetoda je nadjačana, gdje implementiramo logiku za pronalaženje i učitavanje bajtova klase.
Dakle, zašto je sve ovo važno u stvarnom svijetu? Pa, u velikim Java aplikacijama, učitavanje klasa može imati veliki uticaj na performanse i stabilnost. Ako vaša aplikacija ima složenu hijerarhiju učitavača klasa ili ako koristi prilagođene učitavače klasa, morate biti sigurni da sve radi ispravno. Nepravilno učitavanje klase može dovesti do grešaka kao što suClassNotFoundExceptioniliNoClassDefFoundError.
S druge strane, ako razumijete kako rade učitavači klasa, možete ih koristiti u svoju korist. Na primjer, možete optimizirati proces učitavanja klase kako biste smanjili vrijeme pokretanja, ili možete koristiti izolaciju klase kako biste svoju aplikaciju učinili modularnijom i robusnijom.


Kao što smo ranije spomenuli, baš kao i različiti tipovi učitavača koje isporučujem, svaki sa svojom jedinstvenom funkcijom, učitači klasa u Javi također imaju svoje specifične uloge. Bilo da se radi o moćnom Bootstrap Class Loaderu ili prilagođenom učitavaču klasa za specijalnu aplikaciju, svi oni rade zajedno kako bi se svijet Jave zaokružio.
Dakle, imate ga, ubrzani kurs o tome šta je učitavač klasa u Javi. Ako želite da kupite utovarivače za svoje građevinske ili srodne projekte, imamo širok spektar opcija, uključujućiPotpuno hidraulični rovokopač-utovarivač,Mini utovarivač gusjeničar, i6tonski utovarivač na točkovima. Ako ste zainteresirani da saznate više o našim proizvodima i započnete pregovore o nabavci, slobodno nam se obratite. Uvijek nam je drago razgovarati i pronaći najbolje rješenje utovarivača za vaše potrebe.
Reference:
- "Effective Java" Joshua Bloch.
- Oracle Java dokumentacija za ClassLoader.




