Skip to content

环境搭建与快速体验

sunlet edited this page May 28, 2022 · 12 revisions

本节目标

快速搭建一个HelloWord工程,在启动增加一个插件,插件里面有一个单例的服务,服务启动并初始化。

概念简介

JPlugin应用是纯粹的由一系列插件组成的系统,我们基于Jplugin开发应用就是开发一些插件。实质上,JPlugin-core、JPLugin-das、JPlugin-mvc本身也是一些列插件(Plugin)。 每一个插件由插件类和插件资源组成。插件类一般命名为Plugin.java,插件资源为Plugin.java所在的包以及子包所包含的所有代码。

第一步:创建HelloWord工程

设置父POM

在你的Maven工程 pom.xml中增加下面一段,设置父POM:

	<parent>
		<groupId>net.jplugin.pom</groupId>
		<artifactId>base-pom-core</artifactId>
		<version>2.6.0-SNAPSHOT</version>
	</parent>

创建系统启动类 AppMain.java

代码如下

package jplugin.demo.helloworld;

import net.jplugin.core.kernel.PluginApp;
import net.jplugin.core.kernel.api.PluginAutoDetect;

public class AppMain
{
    public static void main( String[] args )
    {
        //让你的Plugin能被自动扫描检测
        PluginAutoDetect.addAutoDetectPackage("jplugin.demo");

        //启动项目
        PluginApp.main(args);
    }
}

创建一个最简单的Plugin

代码如下

package jplugin.demo.helloworld;

import net.jplugin.core.kernel.api.AbstractPlugin;
import net.jplugin.core.kernel.api.PluginAnnotation;

@PluginAnnotation
public class Plugin extends AbstractPlugin {
    public Plugin(){

    }
    @Override
    public int getPrivority() {
        return 0;
    }

    @Override
    public void init() {
        System.out.println("My Plugin Initing........");
    }
}

启动工程

使用AppMain启动你的项目,会发现执行异常:Can't find the config dir, jplugin.home is D:\Work\git-repository\jplugin-demo\hello-world. 这是因为系统启动需要一个配置目录,在 src/main/resources目录下面创建config目录,再次运行AppMain,会在控制台看到系统正常启动,并看到“My Plugin Initing........”信息。

控制台信息解读

下面列出来关键的控制台日志的解释:


$$$ plugin.home=D:\Work\git-repository\jplugin-demo\hello-world\.  解释:jplugin-home目录
$$$ ConfigDir=D:\Work\git-repository\jplugin-demo\hello-world\./src/main/resources/config   解释:配置目录
$$$ WorkDir=D:\Work\git-repository\jplugin-demo\hello-world\.   解释:工作目录,日志会放到这个目录的log子目录下面

... ...

==Now to init plugins==
StartPlugin :[0] net.jplugin.core.kernel.Plugin   解释:系统核心插件kernel启动
StartPlugin :[1] net.jplugin.core.config.Plugin   解释:系统配置插件config启动
StartPlugin :[2] net.jplugin.core.service.Plugin  解释:系统服务插件service启动
StartPlugin :[3] net.jplugin.core.log.Plugin      解释:系统日志插件log启动
StartPlugin :[4] net.jplugin.core.rclient.Plugin  解释:系统rclient插件启动
StartPlugin :[5] jplugin.demo.helloworld.Plugin   解释:这是重点,您自己编写的插件启动了!!!

日志文件

上面控制台打印的 WorkDir下面的log目录,会保存系统日志,可以看到两个日志文件。

  • jplugin-start.log 保存系统启动过程的日志
  • app.elk.log 保存系统运行过程的日志

第二步:创建一个单例的服务(JavaBean)

创建GreetService服务

创建一个Service,GreetService.java,注意需要用@BindService标注它是一个服务,代码如下

package jplugin.demo.helloworld.service;

import net.jplugin.core.kernel.api.Initializable;
import net.jplugin.core.service.api.BindService;
import net.jplugin.core.service.api.RefService;

@BindService
public class AppService implements Initializable {
    @RefService
    GreetService greetService;

    @Override
    public void initialize() {
        System.out.println(this.greetService.getGreeting("Tom"));
    }
}

创建MyService服务

为了引用GreetService服务,我们创建一个新的服务MyService服务,并在属性上通过@RefService自动注入访问GreetService,代码如下

package jplugin.demo.helloworld.service;

import net.jplugin.core.service.api.BindService;

@BindService
public class GreetService {
    public String getGreeting(String name){
        return "################## hello "+name;
    }
}

重新运行AppMain,会看到控制台有对应的输出:“#################### hello Tom”

在Plugin.java当中调用GreetService服务

除了可以在一个服务调用另一个服务,我们再Plugin.java类当中也可以调用服务。我们修改前面的Plugin.java类,修改后代码如下

@PluginAnnotation
public class Plugin extends AbstractPlugin {
    public Plugin(){

    }
    @Override
    public int getPrivority() {
        return 0;
    }

    @RefService
    GreetService greetService;
    
    @Override
    public void init() {
        System.out.println(this.greetService.getGreeting("Tom"));
    }
}

重新运行AppMain,会看到控制台有对应的输出:“#################### hello Jack”

第二步:体验Jplugin-mvc

修改父pom,增加对jplugin-mvc的依赖

pom.xml中parentpom部分修改为

	<parent>
		<groupId>net.jplugin.pom</groupId>
		<artifactId>base-pom-mvc</artifactId>
		<version>2.6.0-SNAPSHOT</version>
	</parent>

在依赖部分,增加对嵌入式tomcat的依赖

		<dependency>
			<groupId>net.jplugin.extension</groupId>
			<artifactId>jplugin-embed-tomcat</artifactId>
		</dependency>

编写一个Controller

package jplugin.demo.helloworld.controller;

import jplugin.demo.helloworld.service.GreetService;
import net.jplugin.core.service.api.RefService;
import net.jplugin.ext.webasic.api.AbstractExController;
import net.jplugin.ext.webasic.api.BindController;

@BindController(path = "/greetService")
public class GreetController extends AbstractExController {
    @RefService
    GreetService greetService;
    public void greet(){
        renderJson(greetService.getGreeting("Tom"));
    }
}

访问服务

用浏览器访问 http://localhost:8080/greetService/greet.do,会看到页面显示 #################### hello Tom

第四步:体验Jplugin与Spring的结合使用

介绍

jplugin-core部分可以结合jplugin-mvc、jplugin-das使用,也可以和spring框架融合在一起使用。在和spirng-boot一起使用时,jplugin管理的Bean(包括Service等各种扩展)可以通过@AutoWire等注解引用Spring容器的bean,Spring的Bean中也可以通过RefXXX等注解引用JPlugin管理的各种bean。