プラグインの実装と使用


IPlugin インターフェイスを実装するクラスで @Plugin アノテーションを宣言して、プラグイン スタートアップ クラスを作成します。これは、プラグイン ファクトリによってロードおよび管理されます。複数のプラグイン起動クラスが含まれており、各プラグイン起動クラスは独自のビジネス インターフェイスを実装して外部サービスを提供できます @Plugin注解来创建插件启动类,其将被插件工厂加载和管理,一个插件包可以包括多个插件启动类,每个插件启动类可以实现自己的业务接口对外提供服务;

  • @Plugin

      @Plugin アノテーション パラメータの説明:

      id:プラグインの一意の ID。入力されていない場合は、初期化クラス名が使用されます。 MD5 暗号化後の値が ID として使用されます。

      name: プラグイン名、デフォルトは "" です。 : プラグインのエイリアス、デフォルトは "";

      author: プラグインの作成者、デフォルトは "";

      email: 連絡先のメールアドレス、デフォルトは "";デフォルトは "1.0.0";

      automatic: ロード後に自動的に実行を開始するかどうか、デフォルトは true;

      description: プラグインの説明、デフォルトは "";

      IPlugin インターフェースメソッドの説明:
    • init: プラグインの初期化;

      getPluginContext: プラグイン環境コンテキスト オブジェクトを返します。

      isInited: プラグインが初期化されているかどうかを返します。 ;

      startup : プラグインを開始します。

      shutdown : プラグインを停止します。

      プラグイン フレームワークは、 IPlugin インターフェース。直接継承することをお勧めします。 サンプルコード:

      @Plugin
      public class DemoPlugin extends AbstractPlugin {
          // 根据需要重写父类方法...
      }
    ビジネスインターフェースと組み合わせたプラグインの例:

    プラグインの使用例
    DemoPlugin プラグインと IBusiness ビジネス インターフェイスの実装。プラグインを使用してビジネス インターフェイス メソッドを呼び出す方法は次のとおりです。

    // 定义一个业务接口
    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.");
        }
    }
    実行結果:

    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();
        }
    }

    注:同じプラグインで複数のビジネス インターフェイスを実装できます。複数のプラグインが同じビジネス インターフェイスを実装している場合、プラグインのロード順序に従って、最後にロードされたプラグイン インスタンスが前者を置き換えます。