Implémentation et utilisation de plug-ins


Créez une classe de démarrage de plug-in en déclarant l'annotation @Plugin sur une classe qui implémente l'interface IPlugin, qui sera chargée et gérée par la fabrique de plug-ins. inclure plusieurs classes de démarrage de plug-in, chaque classe de démarrage de plug-in peut implémenter sa propre interface métier pour fournir des services externes @Plugin注解来创建插件启动类,其将被插件工厂加载和管理,一个插件包可以包括多个插件启动类,每个插件启动类可以实现自己的业务接口对外提供服务;

  • @Plugin

      @Plugin description du paramètre d'annotation :

      id : l'identifiant unique du plug-in, s'il n'est pas renseigné, le nom de la classe d'initialisation sera utilisé. La valeur après le cryptage MD5 est utilisée comme identifiant :

      name : nom du plug-in, la valeur par défaut est "" ; : alias du plug-in, la valeur par défaut est "" ;

      author : auteur du plug-in, la valeur par défaut est "" ;

      email : e-mail du contact, la valeur par défaut est "" ; la valeur par défaut est "1.0.0" ;

      automatique : s'il faut démarrer automatiquement l'exécution après le chargement, la valeur par défaut est vraie ;

      description : description du plug-in, la valeur par défaut est "" ;

      Description de la méthode d'interface IPlugin :
    • init : initialisation du plug-in ;

      getPluginContext : renvoie l'objet de contexte d'environnement du plug-in ;

      isInited : indique si le plug-in a été initialisé ;

      isStarted : renvoie si le plug-in a été démarré ; ;

      startup : Démarrez le plug-in ;

      shutdown : Arrêtez le plug-in ;

      destroy : Détruisez l'objet du plug-in

    • Le framework du plug-in fournit une classe abstraite AbstractPlugin qui encapsule le plug-in ; Interface IPlugin. Il est recommandé d'hériter directement. Exemple de code :

    @Plugin
    public class DemoPlugin extends AbstractPlugin {
        // 根据需要重写父类方法...
    }
    Exemple de plug-in combiné avec une interface métier :

    // 定义一个业务接口
    public interface IBusiness {
        void sayHi();
    }
    
    @Plugin(id = "demo_plugin",
            name = "DemoPlugin",
            author = "有理想的鱼",
            email = "suninformaiton#163.com",
            version = "1.0")
    public class DemoPlugin extends AbstractPlugin implements IBusiness {
    
        @Override
        public void startup() throws Exception {
            super.startup();
            //
            System.out.println("started.");
        }
    
        @Override
        public void shutdown() throws Exception {
            super.shutdown();
            //
            System.out.println("shutdown.");
        }
    
        public void sayHi() {
            System.out.println("Hi, from Plugin.");
        }
    }

    Utilisation du plug-inCi-dessus, nous avons créé un plug-in DemoPlugin et implémenté l'interface métier IBusiness. Voici comment utiliser le plug-in et appeler la méthode de l'interface métier :

    public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            DemoPlugin _plugin = (DemoPlugin) Plugins.get().getPluginFactory().getPlugin("demo_plugin");
            // 或者 
            // _plugin = Plugins.get().getPluginFactory().getPlugin(DemoPlugin.class);
            //
            _plugin.sayHi();
            //
            IBusiness _business = Plugins.get().getPluginFactory().getPlugin(IBusiness.class);
            _business.sayHi();
        } finally {
            YMP.get().destroy();
        }
    }
    Résultat de l'exécution :

    Hi, from Plugin.
    Hi, from Plugin.
    shutdown.
    Remarque

     : Le le même plug-in peut implémenter plusieurs interfaces métier.Si plusieurs plug-ins implémentent la même interface métier, selon l'ordre de chargement du plug-in, l'instance du plug-in chargée en dernier L'objet remplacera le premier ;