Solon2 开发之插件,二、插件扩展机制(Spi)


orchid
电梯物联网专家 2024-01-11 10:24:11 65156 赞同 0 反对 0
分类: 资源
Solon2 开发之插件,二、插件扩展机制(Spi)

插件扩展机制,是基于 “插件” + “配置申明” 实现的解耦的扩展机制(类似 Spring Factories、Java Spi):简单、弹性、自由。它的核心作用,是为模块获得了应用启动入口,并参与了应用生命周期。简称为 Solon 的 Spi。

像 @Tran、@Cache 之类的注解开发成果,都会希望能在所有项目中复用。它们就是基于插件扩展机制实现。

1、插件扩展机制

  • 第一步:定制插件实现类(即实现插件生命周期的内部处理),实现类不能有注入。
//X开头可以让文件排序在未位,方便找到
public class XPluginImpl implements Plugin{
    @Override
    public void start(AopContext context) {
        //插件启动时...
    }
    
    @Override
    public void prestop() throws Throwable {
        //插件预停止时(启用安全停止时:预停止后隔几秒才会进行停止)
    }
    
    @Override
    public void stop(){
        //插件停止时
    }
}
  • 第二步:通过插件配置文件申明自己,须全局唯一存在

约定插件配置文件:

#建议使用包做为文件名,便于识别,且可避免冲突
META-INF/solon/{packname}.properties

约定插件配置内容:

#插件实现类配置
solon.plugin={PluginImpl}  
#插件优化级配置。越大越优先,默认为0
solon.plugin.priority=9      
  • 第三步:扫描并发现插件

程序启动时,扫描 META-INF/solon/ 目录下所有的.properties 文件,找到所有的插件并排序。

2、示例参考,插件:solon.aspect

这个插件提供了 @Dao 和 @Service 扩展注解,进而实现 Class 的动态代理能力。

  • 插件实现类:src/main/java/org.noear.solon.aspect.XPluginImp.java
package org.noear.solon.aspect;

import org.noear.solon.core.AopContext;
import org.noear.solon.core.Plugin;
import org.noear.solon.aspect.annotation.Dao;
import org.noear.solon.aspect.annotation.Service;

public class XPluginImp implements Plugin {
    @Override
    public void start(AopContext context) {
        context.beanBuilderAdd(Dao.class, (clz, bw, anno) -> {
            BeanProxy.binding(bw);
        });

        context.beanBuilderAdd(Service.class, (clz, bw, anno) -> {
            BeanProxy.binding(bw);
        });
    }
}

  • 插件配置文件:src/main/resources/META-INF/solon/solon.aspect.properties
solon.plugin=org.noear.solon.aspect.XPluginImp
  • 插件应用示例
//
// 引入 org.noear:solon.aspect 插件之后
//

@Service
public class AppService {
    @Inject
    SqlMapper sqlMapper1;

    //
    // @Service 注解,可为 bean 添加 class 动态代理;进而支持事务注解:@Tran
    //
    @Tran
    public void addApp(){
        sqlMapper1.appx_add();
    }
}

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
电梯物联网专家L2
粉丝 1 资源 185 + 关注 私信
最近热门资源
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  40
统信uos安装mysql的实例参考  31
分享解决宏碁电脑关机时自动重启的方法  31
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。  29
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  28
统信uosboot区分未挂载导致更新备份失败  27
格之格打印机dp3300系列国产系统uos打印机驱动选择  25
以openkylin为例编译安装内核  23
最近下载排行榜
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
统信uos安装mysql的实例参考 0
分享解决宏碁电脑关机时自动重启的方法 0
在银河麒麟高级服务器操作系统V10SP3中,需要将默认shell类型修改为csh。 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uosboot区分未挂载导致更新备份失败 0
格之格打印机dp3300系列国产系统uos打印机驱动选择 0
以openkylin为例编译安装内核 0
作者收入月榜
1

prtyaa 收益400.53元

2

zlj141319 收益237.46元

3

哆啦漫漫喵 收益231.42元

4

IT-feng 收益219.81元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.07元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!