ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-08-22 22:32:56  阅读:278  来源: 互联网

标签:solon extend Plugin noear 详解 aspect org Solon


Solon详解系列文章:
Solon详解(一)- 快速入门
Solon详解(二)- Solon的核心
Solon详解(三)- Solon的web开发
Solon详解(四)- Solon的事务传播机制
Solon详解(五)- Solon扩展机制之Solon Plugin

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应用启动顺序

  1. 实例化 XApp.global()
  2. 加载应用属性配置
  3. 加载扩展文件夹
  4. 扫描插件并排序记录(插件也可叫扩展组件)
  5. 运行builder函数(如果它不为null)
  6. 运行插件
  7. 扫描source目录并加载java bean
  8. 加载渲染关系
  9. 完成

标签:solon,extend,Plugin,noear,详解,aspect,org,Solon
来源: https://www.cnblogs.com/noear/p/13547433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有