Progettazione di un sistema plug-in

6

Sto lavorando su un progetto Java e vorrei aggiungere un sistema plug-in. Più precisamente, vorrei consentire all'utente di progettare il proprio modulo, inserirlo in un barattolo, lasciarlo in una sottocartella "plugins /" della mia applicazione e utilizzarlo. Sono riuscito ad ottenere un classloader figlio per istanziare oggetti di classi situate in giare esterne, ma ora mi trovo di fronte a un dilemma del design:

Dire Joe crea un plug-in e lo carica in joeplugin.jar. Mi piacerebbe molto che Joe avesse una classe chiamata "instantiation.Factory" e vorrei anche che tutti avessero questa classe con questa esatta posizione e nome. (Questa classe factory implementa ovviamente un'interfaccia che fornisco e attraverso di essa ottengo quello che voglio dal plug-in.) Se Joe non fosse limitato in questo modo, dovrei esaminare il suo intero jar per una classe che implementa la mia interfaccia di fabbrica e non voglio immaginare quanto siano complicate le cose.

Quindi la mia domanda è: dovrei applicare una convenzione di denominazione rigida per questa singola classe? Non ho idea di come funzionano i sistemi plug-in.

    
posta adrianton3 23.11.2012 - 10:17
fonte

2 risposte

4

Guarda il localizzatore di servizio in java. Una delle classi principali è java.util.ServiceLoader . Cerca fondamentalmente un file chiamato come interfaccia e carica la classe chiamata in questo file. Questo è il modo standard per caricare le classi in modo dinamico come plug-in.

    
risposta data 23.11.2012 - 10:37
fonte
0

Presumibilmente si definisce "PluginInterface" e si richiede che JoePlugin implementi PluginInterface. Oltre a ciò, non c'è limite alla quantità di cose che vengono inserite in PlugIninterface, tranne che se lo rendi troppo complicato, impedirai ai creatori di plugin.

    
risposta data 23.11.2012 - 22:01
fonte

Leggi altre domande sui tag