02 2023 档案
摘要:串行的处理过程(含六个事件扩展点 + 两个函数扩展点),代码直接、没有什么模式。易明 提醒: 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了) AppBeanLoadEndEvent 之前的事件,需要启动前通过 EventBus.subscribe(...) 订阅 1、事件订阅示例
阅读全文
摘要:启动参数,在应用启动后会被静态化(为了内部更高效的利用)。比如,想通过体外扩展加载配置,是不能改掉它们的。 1、启动参数 | 启动参数 | 对应的应用配置 | 描述 | | | | | | --env | solon.env | 环境(可用于内部配置切换) | | --config | solon.
阅读全文
摘要:约定参考: //资源路径约定(不用配置;也不能配置) resources/app.yml( 或 app.properties ) #为应用配置文件 resources/WEB-INF/static/ #为静态文件根目标 resources/WEB-INF/view/ #为视图模板文件根目标(支持多视
阅读全文
摘要:本次发布,重点测试和验证了在 java、kotlin、groovy 三种 jvm 语言里,开箱即用的特性。并发布 Solon Initializr: https://solon.noear.org/start/ (也即将发布 idea 插件) 最近,与小诺开源团队合作发布了:Snowy-Solon(
阅读全文
摘要:Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。 强调文档树的操控和构建能力 高性能
阅读全文
摘要:插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。 1、特点说明 所有插件包独享ClassLoader、AopContext、配置;完全隔离 可
阅读全文
摘要:插件体外扩展机制,简称:E-Spi。用于解决 fatjar 模式部署时的扩展需求。比如: 把一些“业务模块”做成插件包放到体外 把数据源配置文件放到体外,方便后续修改 其中, .properties 或 .yml 文件都会做为扩展配置加载,.jar 文件会做为插件包加载。 1、特点说明 所有插件包共
阅读全文
摘要:插件扩展机制,是基于 “插件” + “配置申明” 实现的解耦的扩展机制(类似 Spring Factories、Java Spi):简单、弹性、自由。它的核心作用,是为模块获得了应用启动入口,并参与了应用生命周期。简称为 Solon 的 Spi。 像 @Tran、@Cache 之类的注解开发成果,都
阅读全文
摘要:Solon Plugin 是框架的核心接口,简称“插件”。其本质是一个“生命周期”接口。它可让一个组件类参与程序的生命周期过程(这块看下:《应用启动过程与完整生命周期》): @FunctionalInterface public interface Plugin { //启动 void start(
阅读全文
摘要:1、剖析 Bean 的装包与注册过程 比如,用配置器装配一个 Bean (本质是装配出一个 BeanWrap,并自动注册到容器): @Configuration public class Config{ //同时以名字和类型进行注册 //支持类型或名字注入 @Bean(name="demo", ty
阅读全文
摘要:1、定义构建能力注解,比如@Controller 注解类: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Controller { } 注解类能力注册: //
阅读全文
摘要:在 Java 里动态代理,主要分:接口动态代理 和 类动态代理。因为它的代理类都是动态创建的,所以名字里会带上“动态”。 官网的有些地方叫“代理”,也有些地方叫“动态代理”。都是一个意思。 1、接口动态代理 这是 jdk 直接支持的能力。内在的原理是:框架会动态生成目标接口的一个代理类(即接口的实现
阅读全文
摘要:想要环绕拦截一个 Bean 的函数。需要三个前置条件: 通过注解做为“切点”,进行拦截(不能无缘无故给拦了吧?费性能) Bean 的 method 是被代理的 在 Bean 被扫描之前,完成环绕拦截的注册 1、定义切点和注册环绕拦截 Solon 的切点,通过注解实现,得先定义一个。例如:@Loggi
阅读全文
摘要:为什么需要提取Bean的函数?绝不是闲得淡疼。比如:控制器的@Mapping;再比如:Xxl-Job的@XxlJob。这些都是要提取Bean的函数并定制加工的。 1、比如提取 @XxlJob 注解的函数,并注册到执行器 对Xxl-Job框架来说@XxlJob注解是已经存在的。适配,只需要注册一个Be
阅读全文
摘要:1、启动时扫描 package org.example.demo; public class DemoApp{ public static void main(String[] args){ // // DemoApp.clas 的作用,是提供一个扫描范围;DemoApp.class 所在包名下的b
阅读全文
摘要:Solon 强调 有克制的注入 + 手动控制 结合的模式。好处是,代码用料少、启动快。 Bean 的关键生命节点: | 节点 | 说明 | | | | | 1. Constructor(构造方法) | 不支持参数注入 | | 2. @Inject(注入) | 基于订阅,不确定具体依赖什么时候会被注入
阅读全文
摘要:1、如何注入Bean? 先了解一下Bean生命周期的简化版: 运行构建函数 尝试字段注入(有时同步注入,没时订阅注入。不会有相互依赖而卡住的问题) @Init 函数(是在容器初始化完成后才执行) ... 释放(基本不会发生) 了解这个生命过程后,可以知道注入的内容,在构建函数里是不可用的: @Ser
阅读全文
摘要:1、手动 简单的构建: //生成普通的Bean Solon.context().wrapAndPut(UserService.class, new UserServiceImpl()); //生成带注解的Bean(比如:@Controller) Solon.context().beanMake(Us
阅读全文
摘要:约定 resources/app.yml( 或 app.properties ) #为应用配置文件 配置样例 track: name: xxx url: http://a.a.a db1: jdbcUrl: "jdbc:mysql://..." username: "xxx" password: "
阅读全文
摘要:<dependency> <groupId>org.noear</groupId> <artifactId>solon.hotplug</artifactId> </dependency> 1、描述 基础扩展插件,提供业务插件的 '热插拔' 和 '热管理' 支持。(常规情况,使用普通的体外扩展机制E
阅读全文
摘要:插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。 1、特点说明 所有插件包独享ClassLoader、AopContext、配置;完全隔离 可
阅读全文
摘要:jdk17 如果出现反射权限问题。可添加jvm参数:--add-opens (取消了 illegal-access 参数) #示例: java --add-opens java.base/java.lang=ALL-UNNAMED -jar xxx.jar #示例:(添加多个 add-opens)
阅读全文
摘要:注意:如果在 IDEA 设置里指定了 settings.xml,下面两个方案可能会失效。(或者直接拿"腾讯" 的镜像仓库地址,按自己的习惯配置) 1、可以在项目的 pom.xml 添加 "腾讯" 的镜像仓库 "阿里" 的仓库很难拉取到 solon 包,所以本案采用 "腾讯" 的镜像仓库进行加速 <?
阅读全文
摘要:1、调试模式 开启“调试模式”后,支持动态模板文件、静态资源文件可以实现动态更新。增加启动参数即可开启: --debug=1 使用 solon-test 进行单元测试时,会自动添加 --debug=1 2、借用 IDEA 插件 JRebel 实现类的动态更新 具体百度一下
阅读全文
摘要:1、Java 项目 Java maven 项目 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <
阅读全文
摘要:Solon 是一个强调自启动的框架,原则上是不推荐 war 容器运行的,但总会有些甲方有硬性规定,或者旧环境不能变。 1、操作指南: 在普通项目增加几项内容即可打 war 包(仍可打 jar 包): 添加 webapp/WEB-INF/web.xml 配置(参考模板里的内容) 添加 solon.we
阅读全文
摘要:1、启动时添加 -Dfile.encoding=utf-8,示例: java -Dfile.encoding=utf-8 -jar DemoApp.jar 再出现乱码?一般是文件本身编码问题。检查一下开发工具的设置,及相关文件的编码。
阅读全文
摘要:Solon 是啥?是一个高效的 Java 应用开发框架:更快、更小、更简单。( 代码仓库:https://gitee.com/noear/solon ) 提倡: 克制、简洁、开放、生态 启动快 5 ~ 10 倍;qps 高 2~ 3 倍;运行时内存节省 1/3 ~ 1/2;打包可以缩到 1/2 ~
阅读全文
摘要:一个高效的 Java 应用开发框架:更快、更小、更简单。不是 Spring,没有 Servlet,也无关 JavaEE;新兴独立的开放生态。主框架仅 0.1 MB。 150来个生态插件,覆盖各种不同的应用开发场景: 相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5
阅读全文