Solon 框架启动为什么特别快?
思来想去!可能与 Solon 容器的独立设计有一定关系。
1、Solon 注解容器的运行特点
- 有什么注解要处理的(注解能力被规范成了四种),提前注册登记
- 全局只扫描一次,并在扫描过程中统一处理注解相关
- 扫描注入时,目标有即同步注入,没有时则订阅注入
- 自动代理。即自动发现AOP需求,并按需动态代理
2、内部结构示意图

3、支持四种注解能力的处理对象:
| 对象 | 说明 |
|---|---|
| BeanBuilder | 构建器(比如:@Component 注解,如果没有注册此注解的构建器,则会无视) |
| BeanInjector | 注入器(比如:@Inject、@Db、@CloudConfig、@VaultInject) |
| BeanExtractor | 提取器(比如:@Scheduled、@CloudJob) |
| BeanInterceptor | 拦截器(比如:@Tran、@Cache) |
Solon Aop 的具体表象:即为注解处理,原则上需要提前埋好切点(不支持表达式 Aop)。开发及应用可见《四种自定义注解开发汇总》
4、关于自动代理
当一个组件(即 @Component 注解的类),其函数上的注解有对应的拦截处理时(即有 AOP 的需求)。此组件会启用动态代理。关于代理,可参考《动态代理的本质》。v2.5.3 后支持
5、容器处理的补充
- 比如有些需要拼装的活,可以交给配置器("@Configuration" 注解的类)去处理
- 或者需要初始化的活,交给生命周期的类("LifecycleBean" 接口实现的组件或 "@Init" 注解函数)去处理
- 再可借助 事件总线 + 应用生命周期 做些事情
附:开源仓库
Solon 框架启动为什么特别快?的更多相关文章
- Solon 框架详解(十一)- Solon Cloud 的配置说明
Solon 详解系列文章: Solon 框架详解(一)- 快速入门 Solon 框架详解(二)- Solon的核心 Solon 框架详解(三)- Solon的web开发 Solon 框架详解(四)- ...
- android插件化-apkplug框架启动-02
本文章基于apkplug v1.6.7 版本号编写,最新方式以官网最新消息为准 一 apkplug框架所须要的库文件(宿主) 可从http://git.oschina.net/plug/apkplug ...
- [Abp 源码分析]一、Abp 框架启动流程分析
Abp 不一定仅用于 Asp.Net Core 项目,他也可以在 Console 与 WinFrom 项目当中进行使用,所以关于启动流程可以分为两种,一种是 Asp.Net Core 项目的启动流程, ...
- css3 animation 在某些浏览器中特别快 bugfix
今天在一款三星 4.2.2 的 webview 里,出现 animation 特别快的问题,把: .xxx{ -webkit-animation: xxx 24s linear infinite; } ...
- ThinkPHP5.0源码学习之框架启动流程
ThinkPHP5框架的启动流程图如下: ThinkPHP5的启动流程按照文件分为三步: 1.请求入口(public/index.php) 2.框架启动(thinkphp/start.php) 3.应 ...
- Sql数据库收缩 语句特别快
数据库在收缩的时候..使用菜单 >> 任务 >> 收缩 >> 文件 >> 数据, 特别慢..还会报错失败.. 但使用脚本 USE [dbName] G ...
- Solon 框架详解(九)- 渲染控制之定制统一的接口输出
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- ABP框架 - 启动配置
文档目录 本节内容: 配置ABP 替换内置服务 配置模块 为一个模块创建配置 ABP在启动时,提供基础框架和模型来配置和模块化. 置ABP 在预初始化事件中进行配置,示例: kid1412注:XmlL ...
- ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)
在AbpBootstrapper中的两个至关重要的属性:IIocManager 和 IAbpModuleManager public class AbpBootstrapper : IDisposa ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
随机推荐
- Windows线程开发
Windows线程开发 1.线程基础 Windows线程是可以执行的代码实例.系统十一线程为单位调度程序.一个程序当中可以有多个线程,实现多个任务的处理. Windows线程的特点: 线程都具有1个I ...
- 【HZERO】权限管理
Hzero数据权限介绍 https://open.hand-china.com/community/detail/625872021372407808#3.4 开发建议 Permission注解属性介 ...
- 供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者
概述 2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件.python开发者一旦下载安 ...
- 技术文档 | 免下载、0配置、多任务并发,在Docker Image中使用OpenSCA
想跳过下载步骤快速使用OpenSCA检测代码风险?想实现多个项目并发扫描? 在Docker Image中使用OpenSCA即可轻松实现.一起来look look 目的 方便用户使用最新版本的 Open ...
- 手把手实践教你删除项目当中无用的npm包
在公司中,我们大部分都是多人共同开发和长时间维护一个项目,但是有时候我们会发现有很多已经废弃的npm 包存在 package.json 中,我们想要删除,但是又不能盲目的删除?那么 depcheck ...
- python常见面试题讲解(六)取近似值
题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输出描述: 输出该数值的近似整数值 示例 ...
- longjmp 使 C++ RAII 失效
C 语言的 longjmp 没有进行栈展开,而是直接跳转.从 longjmp 到 setjmp 之间的所有析构函数都没有调用,也就是 RAII 失效. #include <setjmp.h> ...
- KVM 核心功能:内存虚拟化
1 内存虚拟化简介 QEMU-KVM 提供内存的虚拟化,从虚拟机角度看其自身拥有的内存就是真实的物理内存.实际上,虚拟机是 host 上的一个 qemu 进程,在为虚拟机指定内存时,host 上并没有 ...
- centos7 systemctl配置开机自启动服务
centos7使用systemctl替代原来/etc/init.d,按官方的说法是提高系统服务的运行效率.服务配置更加简单易用,对于一些自定义的服务来配置开机自启动,是真的香! 概念理解 它是服务管理 ...
- docker容器中执行GPU环境中的tensorflow和pytorch任务
1. 背景 (1) 业务方提供了一台有GPU的服务器,且已经安装了显卡等组件,cuda版本10.2,具体信息如下 (2) 在裸机上部署anaconda.pytorch.tensorflow较为麻烦,因 ...