-
Notifications
You must be signed in to change notification settings - Fork 49
环境搭建与快速体验
快速搭建一个HelloWord工程,在启动增加一个插件,插件里面有一个单例的服务,服务启动并初始化。
JPlugin应用是纯粹的由一系列插件组成的系统,我们基于Jplugin开发应用就是开发一些插件。实质上,JPlugin-core、JPLugin-das、JPlugin-mvc本身也是一些列插件(Plugin)。 每一个插件由插件类和插件资源组成。插件类一般命名为Plugin.java,插件资源为Plugin.java所在的包以及子包所包含的所有代码。
在你的Maven工程 pom.xml中增加下面一段,设置父POM:
<parent>
<groupId>net.jplugin.pom</groupId>
<artifactId>base-pom-core</artifactId>
<version>2.6.0-SNAPSHOT</version>
</parent>
代码如下
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类,@PluginAnnotation注解不可或缺。
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 保存系统运行过程的日志
创建一个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"));
}
}
为了引用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类当中也可以调用服务。我们修改前面的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-core是一个插件式应用框架,如果需要开发Web应用,需要结合jplugin-mvc或者Spring-boot,二者选择一个即可。本节介绍使用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>
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-core是一个插件式应用框架,如果需要开发Web应用,需要结合jplugin-mvc或者Spring-boot,二者选择一个即可。本节介绍jplugin-core和spring-boot的结合使用。
和spirng-boot一起使用时,jplugin管理的Bean(包括Service等各种扩展)可以通过@AutoWire等注解引用Spring容器的bean,Spring的Bean中也可以通过RefXXX等注解引用JPlugin管理的各种bean。