Java之所以是廣泛使用的編程語(yǔ)言,不僅僅因?yàn)槠渚哂锌缙脚_(tái)性、面向?qū)ο蟆⒖煽啃?,還有很重要的一點(diǎn)是強(qiáng)大的生態(tài)系統(tǒng),spring家族的一系列框架,對(duì)Java的崛起有著不可忽視的作用。
學(xué)Java的不可能不知道Spring,今天給大家介紹一個(gè)號(hào)稱(chēng)springboot的輕量替代框架-Solon,這個(gè)框架還是國(guó)人開(kāi)發(fā)的,真是一個(gè)單挑spring的男人。
認(rèn)識(shí)Solon
Solon是一個(gè)參考了Spring Boot和Javalin的設(shè)計(jì)而創(chuàng)建的框架。它吸取了這兩者的優(yōu)點(diǎn)并避免了繁重的設(shè)計(jì),使得它能夠支持HTTP、WebSocket和Socket等三種通信信號(hào)接入。
Solon只需要2MB的大小就可以支撐完整的MVC開(kāi)發(fā),并且在啟動(dòng)方面只需要0.1秒的時(shí)間。相比之下,一個(gè)普通的Spring Boot MVC項(xiàng)目通常需要起步20MB以上的內(nèi)存占用,并且啟動(dòng)時(shí)間要超過(guò)3秒,同時(shí)其QPS性能也較弱。
官方介紹:
相比springboot,啟動(dòng)快 5 ~ 10 倍;qps 高 2~ 3 倍;運(yùn)行時(shí)內(nèi)存節(jié)省 1/3 ~ 1/2;打包可以縮到 1/2 ~ 1/10;同時(shí)支持 jdk8, jdk11, jdk17, jdk20, graalvm native。
- 克制、簡(jiǎn)潔、高效、開(kāi)放、生態(tài)
- 支持 JDK8、JDK11、JDK17、JDK20
- Http、WebSocket、Socket 三種信號(hào)統(tǒng)一的開(kāi)發(fā)體驗(yàn)(俗稱(chēng):三源合一)
- 支持“注解”與“手動(dòng)”兩種模式,按需自由操控
- Not Servlet,可以適配任何基礎(chǔ)通訊框架(最小 0.3m 運(yùn)行rpc架構(gòu))
- 獨(dú)特的 IOC/AOP 容器設(shè)計(jì)。不會(huì)因?yàn)椴寮兌喽鴨?dòng)變很慢
- 支持 Web、Data、Job、Remoting、Cloud 等任何開(kāi)發(fā)場(chǎng)景
- 兼顧 Handler + Context 和 Listener + Message 兩種架構(gòu)模式
- 強(qiáng)調(diào)插件式擴(kuò)展,可擴(kuò)展可切換;適應(yīng)不同的應(yīng)用場(chǎng)景
- 支持 GraalVm Native 打包
- 允許業(yè)務(wù)插件“熱插”、“熱拔”、“熱管理”
solon生態(tài)架構(gòu)圖
官網(wǎng):https://solon.noear.org/
項(xiàng)目地址:https://gitee.com/noear/solon
上手Solon
web開(kāi)發(fā)的模式和springboot基本一致,但是注解和springboot略有區(qū)別,具體區(qū)別可以看它的官方文檔。
一個(gè)重要的區(qū)別是,Solon 不是基于 Servlet 的開(kāi)發(fā)框架,雖然使用起來(lái)與 Springboot 相似的體驗(yàn),但內(nèi)部使用 Context 包裝請(qǐng)求上下文(底層為:Context + Handler 架構(gòu))。
創(chuàng)建Maven項(xiàng)目,引入依賴(lài)
< parent >
< groupId >org.noear< /groupId >
< artifactId >solon-parent< /artifactId >
< version >2.3.6< /version >
< /parent >
< dependencies >
< dependency >
< groupId >org.noear< /groupId >
< artifactId >solon-web< /artifactId >
< /dependency >
< /dependencies >
編寫(xiě)啟動(dòng)類(lèi)代碼
@SolonMain
public class App{
public static void main(String[] args){
long start = System.currentTimeMillis();
Solon.start(App.class, args);
long end = System.currentTimeMillis();
System.out.println("啟動(dòng)耗時(shí):" + (end - start) + "ms");
}
}
編寫(xiě)Controller
@Controller
public class DemoController {
@Mapping("/hello")
public String hello(String name){
return "Hello " + name;
}
}
運(yùn)行,測(cè)試
可以看出來(lái),啟動(dòng)還是非常非??斓?/p>
打包
???只有4kb?
有點(diǎn)兒驚人,為此,我專(zhuān)門(mén)去新建了個(gè)springboot項(xiàng)目,也是簡(jiǎn)單的一個(gè)接口,打包
好吧,這個(gè)項(xiàng)目也是4k,看來(lái)太簡(jiǎn)單的項(xiàng)目看不出來(lái)區(qū)別。等以后寫(xiě)新項(xiàng)目玩兒的時(shí)候再試試。
順便測(cè)試了一下啟動(dòng)時(shí)間
啟動(dòng)時(shí)間確實(shí)還是 Solon 更快!
小結(jié)
再來(lái)看看Solon的官方文檔,文檔寫(xiě)的很詳細(xì),功能很齊全,Solon的生態(tài)雖然沒(méi)有spring那么強(qiáng)大,但小型項(xiàng)目已經(jīng)完全可以勝任。
感興趣的小伙伴兒們快快用起來(lái)吧,對(duì)于自己的項(xiàng)目很適合,畢竟自己的服務(wù)器內(nèi)存和空間比較小,同樣的項(xiàng)目占用更小的空間和內(nèi)存還是很香的!
-
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104701 -
開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
370瀏覽量
40836 -
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17475 -
SpringBoot
+關(guān)注
關(guān)注
0文章
173瀏覽量
177
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論