ICode9

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

Solon 开发进阶,一、插件扩展机制

2022-01-16 19:35:06  阅读:205  来源: 互联网

标签:插件 solon 进阶 extend noear aspect org Solon


像 @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,进阶,extend,noear,aspect,org,Solon
来源: https://www.cnblogs.com/noear/p/15810964.html

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

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

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

ICode9版权所有