其他

当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而jboot装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。

在jboot中,一下模块已经实现了SPI机制。

  • Jbootrpc
  • JbootHttp
  • JbootCache
  • Jbootmq
  • JbootSerializer

例如,在JbootCache中,内置了三种实现方案:ehcache、redis、ehredis。在配置文件中,我看可以通过 的方式来指定在Jboot应用中使用了什么样的缓存方案。

但是,在Jboot中,通过SPI机制,我们一样可以扩展出第4、第5甚至更多的缓存方案出来。

扩展步骤如下:

  • 第一步:编写JbootCache的子类
  • 第三步:通过在jboot.properties文件中配置上类型为 mycache,配置代码如下:

JbootEvnet事件机制

为了解耦,Jboot内置了一个简单易用的事件系统,使用事件系统非常简单。

第一步,注册事件的监听器。

  1. @EventConfig(action = {"event1","event2"})
  2. public class MyEventListener implements JbootEventListener {
  3. public void onEvent(JbootEvent event){
  4. Object data = event.getData();
  5. System.out.println("get data:"+data);
  6. }
  7. }

通过 配置 让MyEventListener监听上 event1和event2两个事件。

第二步,在项目任何地方发生事件

  1. Jboot.sendEvent("event1", object)

自定义序列化是通过Jboot的SPI机制来实现的,请参考 。

配置文件

要读取jboot.properties的配置信息非常简单,例如我们配置内容如下:

  1. jboot.myconfig.name=aaa
  2. jboot.myconfig.passowrd=bbb
  3. jboot.myconfig.age=10

要读取这个配置信息,我们需要定义我们的一个model类,并通过注解给我们的类配置上类与配置文件的对应关系,如下所示:

编写好配置类MyConfigModel后,我们就可以通过如下代码来读取到配置信息:

  1. MyConfigModel config = Jboot.config(MyConfigModel.class);

在以上章节中,我们已经知道了如何来读取jboot.properties的配置文件,在某些场景下,可能需要我们把我们的配置信息编写到一个独立的properties配置文件里面去,例如:在我们的项目中有一个叫 michael.properties 文件,文件的内容如下:

  1. jboot.myconfig.name=aaa
  2. jboot.myconfig.age=10

那么,一样的,我们需要编写一个model,并配置上@PropertyConfig注解,与读取jboot.properties文件不同的是, 需要添加上file配置,内容如下:

  1. @PropertyConfig(prefix="jboot.myconfig",file="michael.properties")
  2. public class MyConfigModel{
  3. private String name;
  4. private String password;
  5. private int age;
  6. }

然后,和读取jboot.properties一样。

代码生成器

Jboot内置了一个简易的代码生成器,可以用来生成model层和Service层的基础代码,在生成代码之前,请先配置jboot.properties关于数据库相关的配置信息。

第一步:配置数据源

  1. jboot.datasource.type=mysql
  2. jboot.datasource.url=jdbc:mysql://127.0.0.1:3306/jbootdemo
  3. jboot.datasource.user=root
  4. jboot.datasource.password=your_password

第二步:通过JbootModelGenerator生成model代码

  1. public static void main(String[] args) {
  2. //model 的包名
  3. String modelPackage = "io.jboot.test";
  4. JbootModelGenerator.run(modelPackage);
  5. }

第三步:通过JbootServiceGenerator生成Service代码

  1. public static void main(String[] args) {
  2. //生成service 的包名
  3. String basePackage = "io.jboot.testservice";
  4. //依赖model的包名
  5. String modelPackage = "io.jboot.test";
  6. JbootServiceGenerator.run(basePackage, modelPackage);
  7. }

其他