Domanda

Voglio implementare un'applicazione che potrebbe utilizzare le classi implementate agli utenti. Ogni classe dovrebbe essere implementata un'interfaccia che definisco le interfacce e, infine, tutte le classi implementate da un utente, archiviate in un file JAR. Gli utenti copiano i file JAR nel percorso della classe e quindi forniscono solo il nome del file JAR alla mia applicazione. La mia applicazione dovrebbe essere in grado di caricare in modo dinamico il file jar. Per fare questo ho trovato questo post Questo è molto utile, ma carica le classi per nomi di classe. Voglio caricare le lezioni in base ai loro genitori.

public class A implements iA {
    @Override
    int getAValue() { ... }
}

public class B implements iB {
     @Override
     int getBValue() { ... }
}

Supponiamo che il file jar caricato abbia entrambi A e B classi. Voglio ottenere un'istanza dalla classe B Conoscendo il iB Nome dell'interfaccia.

Cosa dovrei fare?

È stato utile?

Soluzione

Dai un'occhiata a questo post: Trova le classi Java che implementano un'interfaccia

Parla della soluzione a ciò che vuoi.

So che ciò che suggerirò non è il modo più leggero per farlo, ma hai appena descritto uno dei casi d'uso fondamentali per un'architettura plug -in in Java e la storia di successo di OSGI.

Suggerirei di usare qualcosa di luce come Apache Felix, rendere il barattolo che l'utente fornisce implementa un semplice OSGI.BundleActivator e registra l'implementazione dell'interfaccia come servizio OSGI. (Questa è solo una mappa di hash di fantasia e niente a che fare con i servizi di riposo o simili).

Quindi puoi semplicemente ottenere tutte le implementazioni di una determinata interfaccia. È abbastanza semplice. Puoi controllare la documentazione Felix qui: http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top