Solon详解(五)- Solon扩展机制之Solon Plugin
2024-10-09 12:24:55
Solon 中也有一种非常解耦的扩展机制:Solon Plugin。这种扩展机制和Spring Factories很像,和SPI也很像。
一、Solon 中的扩展机制
在Solon的扩展插件加载机制,是在 solonplugin/{packname}.properties
文件中配置XPlugin的实现类名称,然后在程序中读取这些配置文件并实例化。这种自定义的SPI机制是Solon Plugin扩展实现的基础。
具体在扩展项目添加申明如下:
- 添加配置:
src/main/resources/solonplugin/{packname}.properties
- 使用包为做不文件名,是为了避免冲突
- 配置内容:
solon.plugin={XPlugin impl}
XPlugin的作用:
在应用启动过程中,在特定的序顺位置,获取运行权限。
二、扩展示例,插件:solon.extend.aspect
这个插件,是为Solon提供 @XDao 和 @XService 扩展注解,进而实现class的动态代理能力;基于ASM实现,但算是比较克制,暂时没加别的功能。本例完整的项目源码:https://gitee.com/noear/solon/tree/master/_extend/solon.extend.aspect,此处主要展示与扩展机制有关系的代码和配置。
- 代码文件:
src/main/java/org.noear.solon.extend.aspect.XPluginImp.java
,实现XPlugin接口:
package org.noear.solon.extend.aspect;
import org.noear.solon.XApp;
import org.noear.solon.core.Aop;
import org.noear.solon.core.XPlugin;
import org.noear.solon.extend.aspect.annotation.XDao;
import org.noear.solon.extend.aspect.annotation.XService;
public class XPluginImp implements XPlugin {
@Override
public void start(XApp app) {
//向Aop工厂注册Bean生成器;代理XDao注解的处理
//
Aop.factory().beanCreatorAdd(XDao.class, (clz, bw, anno) -> {
//为BeanWrap设置class代理
bw.proxySet(BeanProxyImp.global());
});
//向Aop工厂注册Bean生成器;代理XService注解的处理
//
Aop.factory().beanCreatorAdd(XService.class, (clz, bw, anno) -> {
//为BeanWrap设置class代理
bw.proxySet(BeanProxyImp.global());
});
}
}
- 配置文件:
src/main/resources/solonplugin/solon.extend.aspect.properties
,实现自申明效果:
solon.plugin=org.noear.solon.extend.aspect.XPluginImp
主框架会通过扫描 solonplugin 文件夹下的所有 .properties 文件,进而发现各种扩展插件的XPlugin实现类。
- 应用示例
@XService
public class AppService {
@XInject
SqlMapper sqlMapper1;
//
// @XService 注解,可为 bean 添加 class 动态代理;进而支持事务注解:@XTran
//
@XTran
public void addApp(){
sqlMapper1.appx_add();
}
}
三、附:Solon应用启动顺序
- 实例化 XApp.global()
- 加载应用属性配置
- 加载扩展文件夹
- 扫描插件并排序记录(插件也可叫扩展组件)
- 运行builder函数(如果它不为null)
- 运行插件
- 扫描source目录并加载java bean
- 加载渲染关系
- 完成
最新文章
- JQuery选择器JQuery 事件
- Hibernate的数据查找,添加!
- XtraBackup原理解读
- Android学习笔记之短信验证码的获取和读取
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。
- 20145315 《Java程序设计》实验五实验报告
- iOS学习之Object-C语言集合
- DelphiXE7中创建WebService(服务端+客户端)
- Web工程软件升级之数据库升级(一)
- CountDownLatch 和 CyclicBarrier 的运用及实现原理
- wamp虚拟机配置
- redis memcache
- 转:CSS Overflow 属性
- BEANUTIL 对象转JSON
- [Luogu1342] 请柬 - 最短路模板
- angular post 带参数 导出excel
- 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理
- 求割点 割边 Tarjan
- 详解掩膜mask
- python多进程(一)
热门文章
- 【Laravel 】faker数据填充详解
- ken桑带你读源码 之 scrapy_redis
- springboot2.2 集成 activity6 请假完整示例
- 史蒂夫-乔布斯(Steve Jobs)斯坦福大学演讲稿(中英对照)
- 线程_multiprocessing实现文件夹copy器
- NodeJS 极简教程 <;1>; NodeJS 特点 &; 使用场景
- Android中Activity启动模式探索
- Springboot开发web项目
- 详细记录了python爬取小说《元尊》的整个过程,看了你必会~
- Docker技术入门与实战