[Java] Solon 框架的三大核心组件之一插件扩展体系
1、Solon 的三大核心组件
| 核心组件 | 说明 |
|---|---|
| Plugin 插件扩展机制 | 提供“编码风格”的扩展体系 |
| Ioc/Aop 应用容器 | 提供基于注入依赖的自动装配体系 |
| Context+Handler 通用上下文处理接口 | 提供“开放式处理”适配体系(俗称,三元合一) |
2、Solon Plugin 插件扩展机制
几种 Java 扩展机制:
| 扩展机制 | 描述 | 特点 | 体验风格 | 适用性 |
|---|---|---|---|---|
| Java SPI | Java 自带的 | 以接口为单位 | 配置风格 | 适用于所有 Java 生态(最通用) |
| Spring Factories | Spring 框架提供的 | 以组件为单位 | 配置风格 | 适用于 Spring 生态体系 |
| Solon Plugin | Solon 框架提供的 | 以模块为单位 | 编码风格 | 适用于 Solon 生态体系 |
Solon Plugin 是 Java SPI 的一种“增强”模式,强调编码风格。插件模块元信息配置会申明一个 Plugin 接口的实现类,在应用启动时扫描元信息目录,以发现所有申明的插件实现。
Plugin 的接口定义:
public interface Plugin {
//启动
void start(AppContext context) throws Throwable;
//预停止
default void prestop() throws Throwable{}
//停止
default void stop() throws Throwable{}
}
Plugin 实现类的元信息配置申明:以 META-INF/solon 为专属目录;使用 properties 格式;要配置插件的实现类及优先级。
# META-INF/solon/{packname}.properties
solon.plugin={PluginImpl} #插件实现类配置
solon.plugin.priority=1 #插件优化级配置。越大越优先,默认为0
3、Solon Plugin 插件示例
用一个数据缓存与事务相关的插件为例,以模块为单位实现整体装配(编码风格):
public class DemoSolonPlugin implements Plugin {
@Override
public void start(AppContext context) {
if (context.app() != null) {
//添加事务控制支持
if (context.app().source().isAnnotationPresent(EnableTransaction.class)) {
//添加注解拦截器
context.beanInterceptorAdd(Tran.class, TranInterceptor.instance, 120);
}
//添加缓存控制支持
if (context.app().source().isAnnotationPresent(EnableCaching.class)) {
//添加注解拦截器
context.beanInterceptorAdd(CachePut.class, new CachePutInterceptor(), 110);
context.beanInterceptorAdd(CacheRemove.class, new CacheRemoveInterceptor(), 110);
context.beanInterceptorAdd(Cache.class, new CacheInterceptor(), 111);
}
}
//根据配置自动构建数据源
context.beanMake(DataSourcesAutoConfiguration.class);
}
}
插件应用示意:
@EnableTransaction
@EnableCaching
public class App {
public static void main(String[] args) {
Solon.start(App.class, args);
}
}
@Component
public class DemoService {
@Cache
public String test() {
return new Date().toString();
}
@Tran
public void post() {
...
}
}
[Java] Solon 框架的三大核心组件之一插件扩展体系的更多相关文章
- Java 分布式框架面试题合集
Java 分布式框架面试题合集 1.什么是 ZooKeeper? 答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案.设计目的是将那些复杂且容易出错的分布 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- Java集合框架的总结
本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析.当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- java集合框架1
1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成O ...
- Java集合框架的知识总结(1)
说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析. 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象 ...
- [转]轻量级 Java Web 框架架构设计
工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...
- Java集合框架的知识总结
说明:面试准备,写的挺不错的. 转载地址: http://www.cnblogs.com/zhxxcq/archive/2012/03/11/2389611.html 1.综述 所有集合类都位于jav ...
- Java集合框架(一)—— Collection、Iterator和Foreach的用法
1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
- Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取
在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...
随机推荐
- Docker:查看当前登录用户和密码
一.查看 查看所有 docker 服务器登陆的用户和密码. # Linux cat /root/.docker/config.json # Windows C:\Users\Name\.docker\ ...
- JDBC批处理Select语句
本文由 ImportNew - 刘志军 翻译自 Javaranch.如需转载本文,请先参见文章末尾处的转载要求. 注:为了更好理解本文,请结合原文阅读 在上一篇文章中提到了PreparedStatem ...
- elementui半年选择组件
1.基于elementui开发的半年选择组件 2.调用 <el-halfyear-picker v-model="date" :size="size"&g ...
- MySQL中INSERT INTO ... ON DUPLICATE KEY UPDATE浅析
最近在做一个阅读次数的需求的时候,有这样一个场景,如果数据库中没有数据,就进行INSERT操作,有数据的话,阅读次数就+1.此处有两种实现方式,一种是想将数据查出来,在Java中进行处理,没有就INS ...
- 【Amadeus原创】域用户完美执行应用程序
企业环境中,为了安全起见一般都没有赋予域用户或者企业的PC客户端用户管理员权限. 但偶尔会有个别的程序一定需要管理员身份才能执行,如财务某些程序或专业的应用程序.那么如何不赋予用户管理员权限及密码但又 ...
- 11C++循环结构-for循环(1)
一.for语句 引出问题: 当需要重复执行某一语句时,使用for语句.for语句最常用的格式为: for (循环变量赋初值:循环条件:循环变量增值) 语句: 注: "语句:"就是循 ...
- .NET 6 探索 Minimal API 系列
今天看到来自 https://www.dotnetdeveloper.cn/ 的一个 .NET 6 Minimal API 系列,感觉质量不错,特别收录在这里. .Net 6探索 (1) Minima ...
- HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志
HttpClientFactory in ASP.NET Core 2.1 Part 5: 日志 原文地址:https://www.stevejgordon.co.uk/httpclientfacto ...
- 在Ubuntu系统上手动安装GCC环境
Ubuntu系统是自带GCC安装指令的apt install gcc,当前apt源中gcc版本为5.4.0,版本太低,推荐手动安装gcc8.3.0 手动安装gcc8.3.0之前需要先确保安装gcc环境 ...
- 管理员应了解的 SIEM解决方案七大功能 !
SIEM解决方案已成为企业网络安全武器库中不可或缺的一部分.但由于SIEM功能过于复杂且架构难以理解,企业往往SIEM的潜在功能.遗憾的是,他们忽视的潜在功能正是解开企业网络合规的重要部分. 例如, ...