Skip to content

Quick Start

Ricky Fung edited this page Aug 21, 2017 · 6 revisions

1.Plugin 接口

创建一个新module(module名称为xx-api, 参考cherry-demo/cherry-demo-api), 然后分别定义两个接口,如下:

  1. HelloService.java
package cherry.demo.api;

public interface HelloService extends Plugin {

    String echo(String msg);

    void hello(String msg);
}
  1. UserService.java
package cherry.demo.api;

public interface UserService extends Plugin {

    User getUser(String name);

    List<User> getUsers();

    int insert(User user);
}

** 注意 **: HelloService 必须继承自 ```cherry.Plugin```接口。

2. Plugin 接口功能实现

创建一个新module(module名称推荐为xx-plugin, 参考cherry-demo/cherry-demo-plugin), 编写xx-api中接口的相应的实现即可。

  1. HelloServiceImpl.java
package cherry.demo.plugin;

public class HelloServiceImpl implements HelloService {

    @Override
    public String echo(String msg) {
        System.out.println("echo [" + msg + "]");
        return "echo [" + msg + "]";
    }

    @Override
    public void hello(String msg) {
        System.out.println("hello "+msg);
    }

    @Override
    public void init(PluginConfig config) {
        System.out.println("HelloServiceImpl init...");
    }

    @Override
    public void destroy() {
        System.out.println("HelloServiceImpl destroy...");
    }
}
  1. UserServiceImpl.java
package cherry.demo.plugin;

public class UserServiceImpl implements UserService {

    @Override
    public User getUser(String name) {
        User user = new User();
        user.setName(name);
        user.setPassword("root");
        user.setAge(25);
        return user;
    }

    @Override
    public List<User> getUsers() {
        List<User> list = new ArrayList<>();
        for(int i=0; i<5; i++){
            list.add(new User("ricky_"+i, "root", 25+i));
        }
        return list;
    }

    @Override
    public int insert(User user) {
        return 1;
    }

    @Override
    public void init(PluginConfig config) {
        System.out.println("UserServiceImpl init...");
    }

    @Override
    public void destroy() {
        System.out.println("UserServiceImpl destroy...");
    }
}

完成后, 使用 maven clean package 命令对xx-plugin项目打包, 将打包生成的 xx-plugin-version.jar 拷贝到某个目录下(路径由plugins.xml中 节点dir指定)。

3. 配置&加载Plugin

创建一个新module(module名称推荐为xx-main, pom.xml需要添加xx-api依赖, 参考cherry-demo/cherry-demo-main), 用来加载上一步中提到的xx-plugin-version.jar。

  1. plugins.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <context-name>cherry-demo</context-name>

    <!--variables-->
    <property name="path" value="D:/logs/" />
    <property name="threshold" value="100" />

    <!--external jars-->
    <lib dir="D:/plugins/lib1" regex="" />
    <lib dir="D:/plugins/lib2" regex="" />

    <context-param>
        <param-name>app-version</param-name>
        <param-value>v1.0</param-value>
    </context-param>

    <!--plugins-->
    <plugin>
        <plugin-name>helloService</plugin-name>
        <plugin-class>cherry.demo.plugin.HelloServiceImpl</plugin-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>path</param-name>
            <param-value>${path}</param-value>
        </init-param>
    </plugin>

    <plugin>
        <plugin-name>userService</plugin-name>
        <plugin-class>cherry.demo.plugin.UserServiceImpl</plugin-class>
    </plugin>

</configuration>
  1. PluginFactory
package cherry.demo.main;

import cherry.DefaultPluginFactory;
import cherry.PluginFactory;
import cherry.example.api.HelloService;
import cherry.example.api.UserService;
import cherry.example.api.model.User;

import java.io.File;
import java.util.List;

/**
 * Hello world!
 *
 */
public class App {

    public static void main( String[] args ) {

        PluginFactory pluginFactory = new DefaultPluginFactory("classpath:plugins.xml");
        //PluginFactory pluginFactory = new DefaultPluginFactory(new File("/home/plugins.xml"));

        HelloService helloService = (HelloService) pluginFactory.getPlugin("helloService");
        System.out.println(helloService);

        helloService.hello("cherry");
        helloService.echo("cherry");

        UserService userService = pluginFactory.getPlugin(UserService.class);
        System.out.println(userService);

        User user = userService.getUser("cherry");
        System.out.println(user);

        List<User> list = userService.getUsers();
        System.out.println(list);

        //关闭
        pluginFactory.close();
    }
}

完整示例代码: cherry-demo

Clone this wiki locally