像 @Tran、@Cache 之类的注解开发成果,都会希望能在所有项目中复用。Solon Plugin 是一种解耦的插件扩展机制,简单、弹性、自由。类似 Spring Factories、Java Spi。

Solon Plugin 机制的核心作用是:获得了应用启动入口,从而可以做一些事情。

1、Solon Plugin 机制

  • 第一步:定制插件实现类
//X开头可以让文件排序在未位,方便找到
public class XPluginImpl implements Plugin{
@Override
public void start(SolonApp app) {
//插件启动时...
}
}
  • 第二步:通过插件配置文件申明自己,须全局唯一存在

约定插件配置文件:

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

约定插件配置内容:

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

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

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

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

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

import org.noear.solon.SolonApp;
import org.noear.solon.core.Aop;
import org.noear.solon.core.Plugin;
import org.noear.solon.extend.aspect.annotation.Dao;
import org.noear.solon.extend.aspect.annotation.Service; public class XPluginImp implements Plugin {
@Override
public void start(SolonApp app) {
Aop.context().beanBuilderAdd(Dao.class, (clz, bw, anno) -> {
BeanProxy.binding(bw);
}); Aop.context().beanBuilderAdd(Service.class, (clz, bw, anno) -> {
BeanProxy.binding(bw);
});
}
}
  • 插件配置文件:src/main/resources/META-INF/solon/solon.extend.aspect.properties
solon.plugin=org.noear.solon.extend.aspect.XPluginImp
  • 插件应用示例
//
// 引入 org.noear:solon.extend.aspect 插件之后
// @Service
public class AppService {
@Inject
SqlMapper sqlMapper1; //
// @Service 注解,可为 bean 添加 class 动态代理;进而支持事务注解:@Tran
//
@Tran
public void addApp(){
sqlMapper1.appx_add();
}
}

Solon 开发进阶,一、插件扩展机制的更多相关文章

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

    插件扩展机制,是基于 "插件" + "配置申明" 实现的解耦的扩展机制(类似 Spring Factories.Java Spi):简单.弹性.自由.它的核心作 ...

  2. Mybatis插件扩展以及与Spring整合原理

    @ 目录 前言 正文 插件扩展 1. Interceptor核心实现原理 2. Mybatis的拦截增强 Mybatis与Spring整合原理 1. SqlSessionFactory的创建 2. 扫 ...

  3. Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. 【原创】PHP扩展开发进阶

    PHP扩展开发进阶 ​作者:wf (360电商技术) 在第一期PHP扩展开发入门中,简单的介绍了PHP的总体架构和执行机制,并具体说明了怎样开发和编译一个主要的PHP扩展,最后在PHP 5.3的环境下 ...

  5. Solon详解(五)- Solon扩展机制之Solon Plugin

    Solon 中也有一种非常解耦的扩展机制:Solon Plugin.这种扩展机制和Spring Factories很像,和SPI也很像. 一.Solon 中的扩展机制 在Solon的扩展插件加载机制, ...

  6. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. Chrome插件(扩展)开发全攻略

    [干货]Chrome插件(扩展)开发全攻略:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

  8. FireFox 浏览器插件/扩展开发学习

    2014-11-08 内容存档在evernote,笔记名"FireFox 浏览器插件/扩展开发学习"

  9. 开发chrome插件(扩展)

    官方文档 https://developer.chrome.com/extensions/getstarted.html [干货]Chrome插件(扩展)开发全攻略 http://blog.haoji ...

  10. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

    1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...

随机推荐

  1. linux系统centos7安装docker

    1.Docker官网安装地址 https://docs.docker.com/engine/install/centos/#prerequisites 2.离线安装下载地址 https://downl ...

  2. 请问您今天要来点 ODT 吗

    梗出处:请问您今天要来点兔子吗? 这篇文章主要记录一下自己学习 \(\text{ODT}\) 发生的种种. CF896C Willem, Chtholly and Seniorious \(\text ...

  3. go 上下文:context.Context

    Go语言中的上下文(Context)是一种用于在 Goroutines 之间传递取消信号.截止时间和其他请求范围值的标准方式.context 包提供了 Context 类型和一些相关的函数,用于在并发 ...

  4. Modbus转Profinet--TS-180 网关连接西门子 PLC 和工业称重仪表

    项目 随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个 工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数.该系统使用的是 西门子 S7 ...

  5. 用友NC产品接口开发,通过轻易云数据集成平台快速调用

    通过用友NC产品的 UAP V63平台.插件相关处理.相关业务逻辑处理课程目标与要求课程内容课程目标与要求业务逻辑处理外部系统信息设置节点新建外部系统默认匹配规则:仅按对照表:外部系统数据与UAP.接 ...

  6. Android学习day04【Button】

    出现的一些小状况: 小状况 报错,代码显示运行成功 但是无法在模拟机上显示 原因是没有在包含应有id 其二是关于设置背景颜色中 关于background与backgroundTint的区别 //这是b ...

  7. Vite4+Typescript+Vue3+Pinia 从零搭建(6) - 状态管理pina

    项目代码同步至码云 weiz-vue3-template pina 是 vue3 官方推荐的状态管理库,由 Vue 核心团队维护,旨在替代 vuex.pina 的更多介绍,可从 pina官网 查看 特 ...

  8. 在 JMeter 中使用 JSON 提取器提取特定条件下的值

    当你需要在 JMeter 中对接收到的 JSON 响应进行处理时,JSON 提取器是一个非常有用的工具.在本文中,我们将讨论如何使用 JSON 提取器来提取特定条件下的值,以满足你的需求. 问题描述 ...

  9. 精致的Javascript代码

    1. 统计一个数组中,每个值的个数 var cards = [1, 2, 3, 4, 3, 2, 1, 4, 5] var dict = {}; for(var i = 0; i < cards ...

  10. C++ Qt开发:MdiArea多窗体组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍MdiArea ...