플러그인 구현 및 사용


IPlugin 인터페이스를 구현하는 클래스에 @Plugin 주석을 선언하여 플러그인 시작 클래스를 생성합니다. 이 클래스는 플러그인 팩토리에 의해 로드되고 관리됩니다. 플러그인 패키지는 여러 개를 포함할 수 있습니다. 각 플러그인 시작 클래스는 자체 비즈니스 인터페이스를 구현하여 외부 서비스를 제공할 수 있습니다. @Plugin注解来创建插件启动类,其将被插件工厂加载和管理,一个插件包可以包括多个插件启动类,每个插件启动类可以实现自己的业务接口对外提供服务;

  • @Plugin

      @Plugin 주석 매개변수 설명: #🎜 🎜#

      id: 플러그인의 고유 ID를 입력하지 않으면 초기화 클래스 이름의 MD5 암호화 값이 ID로 사용됩니다. #

      name: 플러그인 이름, 기본값은 " ";

      alias: 플러그인 별칭, 기본값은 "";

      author: 플러그 -작성자, 기본값은 "";

      email: 연락처 이메일, 기본값은 "";

      version: 플러그인 버전, 기본값은 "1.0.0 ";

      automatic: 로드 후 자동으로 실행을 시작할지 여부, 기본값은 true입니다.#🎜🎜 #

      description: 플러그인 설명, 기본값은 "";

      # 🎜🎜#

      IPlugin 인터페이스 메서드 설명:
    • #🎜 🎜#init: 플러그인 초기화

      getPluginContext: 반환 플러그인 환경 컨텍스트 객체

      isInited: 플러그인이 초기화되었는지 여부를 반환합니다.

      isStarted: 플러그인이 시작되었는지 여부를 반환합니다. 🎜#

      startup: 플러그인을 시작합니다.

      shutdown: 플러그인을 중지합니다.

      destroy: 플러그인 개체를 삭제합니다. ## 🎜🎜#

      플러그인 프레임워크는 IPlugin 인터페이스를 캡슐화하는 AbstractPlugin 추상 클래스를 제공합니다. 샘플 코드:

      #🎜 🎜#

      @Plugin
      public class DemoPlugin extends AbstractPlugin {
          // 根据需要重写父类方法...
      }
      # 🎜🎜#
    • 비즈니스 인터페이스를 결합하는 플러그인의 예:

    // 定义一个业务接口
    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.");
        }
    }
    #🎜🎜 #
    #🎜🎜 #플러그인 사용

    위에서는 DemoPlugin 플러그인을 만들고 IBusiness 비즈니스 인터페이스를 구현했습니다. 에서 비즈니스 인터페이스 메서드를 호출합니다:

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

    실행 결과:

    Hi, from Plugin.
    Hi, from Plugin.
    shutdown.
    # 🎜🎜#

    Note
    : 여러 플러그인이 동일한 비즈니스 인터페이스를 구현하는 경우 플러그인 로딩에 따라 여러 개의 비즈니스 인터페이스를 구현할 수 있습니다. 순서에 따라 마지막으로 로드된 플러그인 인스턴스 객체가 이전 객체를 대체합니다.