Se io uso try { Class.forName(“my.package.Foo”); // it exists on the classpath } catch(ClassNotFoundException e) { // it does not exist on the classpath } il blocco di inizializzazione statico di “Foo” viene avviato. C’è un modo per determinare se una class “my.package.Foo” si trova sul classpath senza avviare l’inizializzatore statico?
Sommario delle domande: Come modifico il codice qui sotto in modo che il codice non affidabile caricato dynamicmente funzioni in una sandbox di sicurezza mentre il resto dell’applicazione rimane libero? Perché URLClassLoader non lo gestisce semplicemente come dice? EDIT: aggiornato per rispondere ad Ani B. EDIT 2: Aggiunto PluginSecurityManager aggiornato. La mia applicazione ha un […]
Sappiamo che possiamo sovrascrivere il classloader del sistema con: java -Djava.system.class.loader=com.test.MyClassLoader xxx Quindi, dal momento che com.test.MyClassLoader è di per sé una class, da chi viene caricata? Come otteniamo il file di class di questo classloader “meta”?
Sto solo ora iniziando a imparare l’architettura interna di Java. Ho capito a grandi linee il concetto di caricamento di classi che carica le classi richieste quando jvm esecuzione, ClassNotFoundException viene lanciata quando una class non viene trovata e il caricatore di classi specifico carica le classi a cui fa riferimento la class. Qualcuno può […]
Attualmente sto caricando le classi Java usando Class.forName() per caricarlo. clazz = Class.forName(“interfaces.MyClass”); Ma ora voglio caricare classi da diverse directory, ho provato a impostare classpath per clazz = Class.forName(“-cp \”C:/dir\” distantinterfaces.DistantClass”); Senza successo e ClassNotFoundException . Il percorso completo per class distante è: C:/dir/distantinterfaces/DistantClass.class
In poche semplici frasi, cos’è un ClassLoader Java, quando viene utilizzato e perché? OK, ho letto un articolo wiki. ClassLoader carica le classi. OK. Quindi, se includo i file jar e li importa, un ClassLoader fa il lavoro. Perché dovrei preoccuparmi di questo ClassLoader? Non l’ho mai usato e non sapevo che esistesse. La domanda […]
Finora, gli esempi che ho visto per ClassLoaders personalizzati coinvolgono la sottoclass di URLClassLoader e utilizzano quell’istanza specifica per caricare le classi nelle risorse. Ho cercato invano di cercare metodi alternativi per sostituire SystemClassLoader, in modo che il mio ClassLoader possa essere consultato per le classi che non si trovano nel classpath. Ho provato Thread.currentThread().setContextClassLoader […]
Sviluppando un’applicazione Java fortemente basata su XML, recentemente ho riscontrato un problema interessante su Ubuntu Linux. La mia applicazione, che utilizza Java Plugin Framework , non è in grado di convertire un documento XML con dom4j in implementazione di Batik delle specifiche SVG. Sulla console, imparo che si verifica un errore: Eccezione nel thread “AWT-EventQueue-0” […]
Quando si carica dynamicmente una class, quando è opportuno utilizzarla Class.forName(“SomeClass”); e quando dovrei usare ClassLoader.getSystemClassLoader().loadClass(“SomeClass”); O sono due modi di fare la stessa cosa?
C’è un modo per aggirare i problemi di caricamento della class causati dall’avere due enumerazioni che fanno riferimento l’un l’altro? Ho due serie di enumerazioni, Foo e Bar, definite in questo modo: public class EnumTest { public enum Foo { A(Bar.Alpha), B(Bar.Delta), C(Bar.Alpha); private Foo(Bar b) { this.b = b; } public final Bar b; […]