Solon详解(一)- 快速入门

Solon详解系列文章:
Solon详解(一)- 快速入门
Solon详解(二)- Solon的核心
Solon详解(三)- Solon的web开发
Solon详解(四)- Solon的事务传播机制
Solon详解(五)- Solon扩展机制之Solon Plugin
Solon详解(六)- Solon的校验框架使用、定制与扩展
Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解(八)- Solon的缓存框架使用和定制
Solon详解(九)- 渲染控制之定制统一的接口输出

一、Solon

最近号称 Spring boot 轻量替代框架的 Solon。得空搞了一把,确实好用,小巧而快速。那Solon到底是什么,又是怎么好用呢?

什么是Solon?

Solon是参考 Spring boot 和 Javalin 而设计。吸取了两者的的优点,避开了很多繁重的设计,使其支持 http, websocket, socket 三种通讯信号接入。Solon 2m即可支撑起完整的mvc开发了,0.1秒就可以完成启动;相对于言,Spring boot 的一个普通mvc项目,基本上20M起步,启动要3秒以上,而且qps也弱了很多。

总体来说,Solon 有着类似于 Spring boot的开发体验;故而入坑成本极低,替代很方便。

项目源码:https://gitee.com/noear/solon

Solon能干些什么?

  • Web 开发(Mvc)
  • Job 定时任务开发
  • Remoting 开发(Socket 、Rpc...)
  • Cloud 分布式开发 或 微服务开发
  • 等...

Solon的优缺点

优点

  1. 更小、更快、更自由
  2. 支持注解与手动两种模式,按需自由操控
  3. 自带IOC & AOP容器,支持PRC、REST API、MVC开发
  4. 集合 Handler + Context 和 Listener + Message 两种架构模式;强调插件式扩展;适应不同的应用场景
  5. 统一 Http、WebSocket、Socket 三种信号的开发体验
  6. 插件可扩展可切换:启动插件,扩展插件,序列化插件,数据插件,会话状态插件,视图插件(可共存) 等...
  7. 使用感觉与 Spring Boot 近似,迁移成本低

缺点

  1. 新框架的通病,文档相对较少
  2. 第三方项目的适配较少

二、快速入门

1、Solon的Java bean配置方式

使用Solon,可以零配置就让你的项目快速运行起来,完全使用代码和注解取代配置。使用java代码方式可以更好的理解你配置的Bean,下面就先来看看两个最基本的注释:

1)纯手动方式
Aop.wrapAndPut(UserDao.class);

//或
Aop.wrapAndPut(UserDao.class, new UserDao());
2)@Configuration + @Bean 方式

Solon 的java配置方式是通过@Configuration 和 @Bean这两个注释实现的(没有xml方案):

@Configuration
public class SolonConfig {
    @Bean
    public UserDao getUserDao() {
        return new UserDao();
    }
}
3)@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.5.5</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的高效和简洁了?配置就是如此简单,功能就是如此强大,但通过上面一系列的讲解,是不是也会产生一些疑惑呢,比如:

  1. Solon启动的过程,都干了啥?
  2. WEB应用的默认端口就是8080,那这个端口要怎么修改呢?
  3. 我们自定义的配置要如何读出来?
  4. 页面重定向用什么接口?
  5. 等等...

淡定,后续文章将会对一些常见的问题展开说明。

附:Solon项目地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351