Springboot mini - Solon详解(一)- 快速入门
一、Springboot min -Solon
最近号称 Springboot mini 的 Solon框架,得空搞了一把,发觉Solon确实好用,小巧而快速。那Solon到底是什么,又是怎么好用呢?
什么是Solon?
Solon是参考Spring boot 和 Javalin 而设计。吸取了两者的的优点,避开了很多繁重的设计,使其支持http, websocket, socket 三种通讯信号接入。Solon 2M即可支撑起普通的mvc开发了,0.1秒就可以完成启动;相对于言,Spring boot 的一个普通mvc项目,基本上20M起步,启动要3秒以上,而且qps也弱了很多。
总体来说,Solon 有着类似于 Spring boot的开发体验;故而号称Springboot mini。
项目源码:https://gitee.com/noear/solon
Solon的优缺点
优点
- 更小、更快、更自由
- 支持注解与手动两种控制模式,自由切换
- 自带IOC & AOP容器,支持MVC
- 采用Handler + Context 架构;强调插件式扩展
- 统一Http(支持 Servlet 或 NoServlet),WebSocket,Socket三种信号接入
- 插件可扩展可切换:启动插件,扩展插件,序列化插件,数据插件,会话状态插件,视图插件(可共存) 等...
- 体验与Spring boot相近,迁移成本低
缺点
- 新框架的通病,文档相对较少
- 第三方项目的适配较少
二、快速入门
1、Solon的Java bean配置方式
使用Solon,可以零配置就让你的项目快速运行起来,完全使用代码和注解取代配置。使用java代码方式可以更好的理解你配置的Bean,下面就先来看看两个最基本的注释:
1)@Configuration + @Bean 方式
Solon 的java配置方式是通过@Configuration 和 @Bean这两个注释实现的(没有xml方案):
@Configuration
public class SolonConfig {
@Bean
public UserDao getUserDao() {
return new UserDao();
}
}
2)@Component
该示例将通过java配置方式配置Component,实现Solon IOC功能。
下面是一个简单的模拟从数据库获取User数据的Dao类(使用了@Component注解,说明它将交给Solon容器管理)。
@Component
public class UserDao {
public List<String> queryUserList() {
//为省事儿,此处不操作数据库
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add("User " + i);
}
return list;
}
}
然后是一个最最常见的Service,通过注入UserDao,使用UserDao的方法获取用户数据。
@Component
public class UserService {
@Inject
UserDao userDao;
public void getUserList() {
List<String> list = userDao.queryUserList();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
接下来就是启动Solon的容器服务, 然后从容器中拿到UserService,并调用其获取用户数据的方法,代码如下:
public class Test {
public static void main(String[] args) {
//启动容器服务
Solon.start(Test.class, args);
//或通过Aop对象获取托管的Bean(或者注解方式)
//
UserService userService = Aop.get(UserService.class);
userService.getUserList();
}
}
像普通的java程序一样,直接运行Test类中的main方法即可在控制台看到用户数据输出了。
可以发现和以往的Spring boot 很像;又有点不一样,尤其是手写AOP模式。
2、第一个Web应用
通过上面的示例,我们已经知道了Solon的java配置方式是怎么回事了,那接下来便正式开始使用Solon来开发我们的第一个web应用了.
1)pom.xml配置
设置solon的parent
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>1.2.8</version>
</parent>
设置solon的parent配置不是必须的,但包含了大量默认的配置,可简化我们的开发。
导入solon的web支持
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
<type>pom</type>
</dependency>
通过上面简单的2步配置,Solon就配置完毕了,是相当简洁的呢?
2)小示例
@Controller //这标明是一个solon的控制器
public class HelloApp {
public static void main(String[] args) { //这是程序入口
Solon.start(HelloApp.class, args);
}
@Mapping("/hello")
public String hello(String name){
return "Hello world!";
}
}
Solon 程序的重点是要:在main函数的入口处,通过 Solon.start(...) 启动Solon的容器服务,进而启动它的所有机能。
运行HelloApp中的main()方法,启动该web应用后,在地址栏输入"http://localhost:8080/hello",就可以看到输出结果了。
Hello world!
三、疑问
到这里是不是已经大概感觉到了Solon的高效和简洁了?配置就是如此简单,功能就是如此强大,但通过上面一系列的讲解,是不是也会产生一些疑惑呢,比如:
- Solon启动的过程,都干了啥?
- WEB应用的默认端口就是8080,那这个端口要怎么修改呢?
- 我们自定义的配置要如何读出来?
- 页面重定向用什么接口?
- 等等...
淡定,后续文章将会对一些常见的问题展开说明。
附:Solon项目地址
- gitee: https://gitee.com/noear/solon
- github: https://github.com/noear/solon
Springboot mini - Solon详解(一)- 快速入门的更多相关文章
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(三)- Solon的web开发
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- Solon详解(六)- Solon的校验扩展框架使用与扩展
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
随机推荐
- quic 2 ietf-transport-draft-ietf-quic-transport-09
quic的优点 Low-latency connection establishment Multiplexing without head-of-line blocking Authenticate ...
- mysql之分区表
1.分区表概述: 1.分区表的主要意义在于,对于表结构进行划分,不同的数据进入不同的分区中,以便于在查询过程中,只查找指定分区的数据,减少数据库扫描的数据量. 2.虽然从逻辑上看分区表是一张表,但是底 ...
- linx mysql安装
文章引用:https://www.cnblogs.com/shizhongyang/p/8464876.html 只做了少量修改,感谢博主 注:未防止混淆,这里都用绝对路径执行命令 除了文件内容中的# ...
- SMB远程代码执行漏洞(CVE-2020-0796)分析、验证及加固
这几天有点忙,CVE-2020-0796出来了,没静下心来关注一下,显得太不尊重这个漏洞了,今天周末,关注一下,水一篇. 一.漏洞描述 漏洞公告显示,SMB 3.1.1协议 ...
- PHP的命令执行漏洞学习
首先我们来了解基础 基础知识来源于:<web安全攻防>徐焱 命令执行漏洞 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.pas ...
- bWAPP----iFrame Injection
iFrame Injection 直接上代码 1 <div id="main"> 2 3 <h1>iFrame Injection</h1> 4 ...
- 去年去阿里面试,被问到java 多线程,我是这样手撕面试官的
1.多线程的基本概念 1.1进程与线程 程序:是为完成特定任务,用某种语言编写的一组指令的集合,即一段静态代码,静态对象. 进程:是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,每个程 ...
- guitar pro系列教程(二十):Guitar Pro使用技巧之使用向导
本章节将采用图文结合的方式为大家讲述{cms_selflink page='index' text='Guitar Pro'}使用技巧里面的使用向导的相关知识,有兴趣的朋友可以一起来学习哦. 当你创建 ...
- 使用Folx下载任务完成后,怎么自动完成关闭
下载工具的优点是可以通过多线程的方式,提高文件的下载速度,减少用户的下载时间.但另一方面来说,下载工具为了达到高速下载,也会占据较多的带宽资源,甚至会拖慢电脑的运行. 因此,很多用户会利用电脑的空闲时 ...
- Dapr DotNet5 HTTP 调用
Dapr DotNet5 HTTP 调用 版本介绍 Dotnet 版本:5.0.100 Dapr dotnet 版本:0.12.0-preview01 注意: Asp.Net Core 项目中的 la ...