十年前 Rod Johnson 說了 J2EE is dead,然後就有了 SpringFramework,當時成為一股風潮。之後 JEE 6 好不容易有跟上的聲勢 (加了一堆 Spring/Hibernate 的概念),一堆 JEE 傳教士紛紛跑出來說不該再用 Spring …
時至今日,cloud 已是佈署的基本款,不管你有沒有用 docker/microservice,你都會想用小 server 裝個小服務 (因 cloud 很適合開一堆小 VM)。什麼都全包的 JEE container 忽然間失去了魅力。然而 Spring 卻在這時推出了 Spring Boot,一整個打中潮流和需求點,於是 JEE 再度被 Spring 打敗一次。這篇文章也點出大廠都不把心力放在 JEE 上了,跑去搞 cloud,JEE8/9 沒有任何下文…
Spring 當初打的名號是 lightweight container,每個元件都是可以隨需求自己加上去,不用硬包在一起,這個起步式在十幾年前是對的,到了現在還是對的。這並不是風水輪流轉的緣故,而是這是軟體界永遠不變的真理。
Spring 中期也是搞錯好幾次方向,像是 Ruby on Rails 剛興起時,Spring 也跟風去搞什麼 Groovy,然後又做 command line 工具 spring root,可以像 Rails 一樣幾個指令就生一個 scaffolding。結果 Rails 潮流結束後這些東西就乏人問津。接下來 Spring 又去搞 OSGi,這也是浪費了無數的資源,去完成一件錯誤的產品 (太難懂、太難用、沒有迫切需求… ),接下來就被 VMWare 給買下了。
話說回來,Spring Boot 這新產品很受大家喜歡,歷經中期一連串的失敗還能再站起來還真是不簡單。Spring Boot 當然是跟上現在的 cloud/microservice 潮流才會起飛,但這產品在十年前出的話,我自己也會想用,所以也不盡然是風潮的關係。我想是因為它真正解決了問題 (簡化設定和佈署),又沒有增加任何難度 (你不用再多學一套工具像是 docker 什麼的,它終究是個 .jar
而已)。
----
老骨頭講古講完了… 說實在的,新生代 web 開發者選擇後端的話,通常是 nodejs > rails > 其他平台
這種順序,Spring 再好也是老骨頭才會去選吧。