Solon详解(一)- 快速入门
一、Solon
最近号称小而美的的Solon框架,终于得空,搞了一把,发觉Solon确实好用,那Solon到底是什么,又是怎么好用呢?
什么是Solon?
Solon参考过Spring boot 和 Javalin 的设计。吸取了两者的的优点,避开了很多繁重的设计,使其支持http, websocket, socket 三种通讯信号接入。Solon 2M即可支撑起普通的mvc开发了,0.1秒就可以完成启动;相对于言,Spring boot 的一个普通mvc项目,基本上20M起步,5秒左右完成启动。
总体来说,Solon 有着类似于 Spring boot的开发体验。
Solon的优缺点
优点
- 小巧美丽
- 快速构建项目
- 项目可独立运行,不需要外部的web容器(jar直接部署)
- 部署效率高
缺点
- 文档很少
- 第三方项目的适配少(与Spring生态没法比)
二、快速入门
1、Solon的Java配置方式
使用Solon,可以零配置就让你的项目快速运行起来,完全使用代码和注解取代配置。使用java代码方式可以更好的理解你配置的Bean,下面就先来看看两个最基本的注释:
1)@XConfiguration 和 @XBean
Solon的java配置方式是通过@XConfiguration 和 @XBean这两个注释实现的:
- @XConfiguration 作用于类上,对Bean进行配置
- @XBean 用在类上,也可以作用在 @XConfiguration 类的方法上
2)示例
该示例将通过java配置方式配置Bean,实现Solon IOC功能。
下面是一个简单的模拟从数据库获取User数据的Dao类(使用了@XBean注解,说明它将交给Solon容器管理)。
@XBean
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;
}
}
//也可以通过配置器构建Bean
//
//@XConfiguration
//public class SolonConfig {
// @XBean
// public UserDao getUserDao() {
// return new UserDao();
// }
//}
然后是一个最最常见的Service,通过注入UserDao,使用UserDao的方法获取用户数据。
@XBean
public class UserService {
@XInject
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) {
//启动容器服务
XApp.start(Test.class, args);
//通过Aop对象获取Bean(或者注解方式)//可以用代码的方式获取托管bean
//
UserService userService = Aop.get(UserService.class);
userService.getUserList();
}
}
像普通的java程序一样,直接运行Test类中的main方法即可在控制台看到用户数据输出了。
应该可以发现了,以往的Spring boot 很像,又很不一样。
2、第一个Web应用
通过上面的示例,我们已经知道了Solon的java配置方式是怎么回事了,那接下来便正式开始使用Solon来开发我们的第一个web应用了.
1)pom.xml配置
设置solon的parent
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>1.0.13</version>
</parent>
设置solon的parent配置不是必须的,但包含了大量默认的配置,可简化我们的开发。
导入solon的web支持
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-web</artifactId>
<type>pom</type>
</dependency>
通过上面简单的2步配置,Solon就配置完毕了,是相当简洁的呢?
2)小示例
@XController //这标明是一个solon的控制器
public class HelloApp {
public static void main(String[] args) { //这是程序入口
XApp.start(HelloApp.class, args);
}
@XMapping("/hello")
public String hello(String name){
return "Hello world!";
}
}
Solon 程序的重点是要:在main函数的入口处,通过XApp.start(...) 启动Solon的容器服务,进而启动它的所有机能。
运行HelloApp中的main()方法,启动该web应用后,在地址栏输入"http://localhost:8080/hello",就可以看到输出结果了。
Hello world!
三、疑问
到这里是不是已经大概感觉到了Solon的高效和简洁了?配置就是如此简单,功能就是如此强大,但通过上面一系列的讲解,是不是也会产生一些疑惑呢,比如:
- Solon启动的过程,都干了啥?
- WEB应用的默认端口就是8080,那这个端口要怎么修改呢?
- 我们定义的配置要如何读出来?
淡定,后续文章将会对一些常见的问题展开说明。
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的事务传播机制 ...
- Solon详解(二)- Solon的核心
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(三)- Solon的web开发
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(八)- Solon的缓存框架使用和定制
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(九)- 渲染控制之定制统一的接口输出
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(11)- Mybatis 与 Solon 相亲相爱
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
随机推荐
- .Net Core Controller
[HttpGet] public async Task<ActionResult<IEnumerable<ABBUserModel>>> GetUser() { / ...
- 云原生时代高性能Java框架—Quarkus(二)
--- *构建Quarkus本地镜像.容器化部署Quarkus项目* Quarkus系列博文 Quarkus&GraalVM介绍.创建并启动第一个项目 构建Quarkus本地镜像.容器化部署Q ...
- 蒲公英 · JELLY技术周刊 Vol.16 谷歌首个线上 Web 开发者大会
蒲公英 · JELLY技术周刊 Vol.16 近期,谷歌有史以来的第一次线上谷歌 Web 开发者大会,Web Vitals.PWA.DevTools 和 Lighthouse 6.0 等一系列特性或产 ...
- statsmodels 示例
Statsmodels 示例 https://www.statsmodels.org/stable/examples/index.html
- PHP ezmlm_hash() 函数
定义和用法 ezmlm_hash() 函数用于在 MySQL 数据库中保存 EZMLM 邮件列表的哈希值. 该函数接收一个 Email 地址参数,返回一个整数哈希值. 语法 int ezmlm_has ...
- PHP sin() 函数
实例 返回不同数的正弦: <?php高佣联盟 www.cgewang.comecho(sin(3) . "<br>");echo(sin(-3) . " ...
- css浮动属性
1.为什么需要浮动 HTML中的标签元素大致分为三类:块状元素.内联元素.内联块元素. 每种元素都有其各自的特点,其中块状元素会独占一行,而内联元素和内联块元素则会在一行内显示.如果我们想让两个甚至多 ...
- luogu P4929 【模板】舞蹈链 DLX
LINK:舞蹈链 具体复杂度我也不知道 但是 搜索速度极快. 原因大概是因为 每次检索的时间少 有一定的剪枝. 花了2h大概了解了这个东西 吐槽一下题解根本看不懂 只能理解大概的想法 核心的链表不太懂 ...
- 4.18 省选模拟赛 无聊的计算器 CRT EXBSGS EXLucas
算是一道很毒瘤的题目 考试的时候码+调了3h才搞定. op==1 显然是快速幂. op==2 有些点可以使用BSGS 不过后面的点是EXBSGS. 这个以前学过了 考试的时候还是懵逼.(当时还是看着花 ...
- 【CF600E】Lomset gelral 题解(树上启发式合并)
题目链接 题目大意:给出一颗含有$n$个结点的树,每个节点有一个颜色.求树中每个子树最多的颜色的编号和. ------------------------- 树上启发式合并(dsu on tree). ...