# 為什麼要用Spring Boot做專案開發? ###### tags: `Spring Boot`, `Blogger`, `專案開發` > 個人 Google Blogger 文章網址: https://utilbooks.blogspot.com/2021/01/spring-boot.html :::info 眾所周知, Spring Boot 是一個 Java EE 的框架。 ::: 那麼,專案開發該使用 Spring?還是 Spring MVC?還是 SSH ?還是SSM?這次就一起來搞清楚吧! 首先介紹什麼是 Spring,Spring 是 Java EE 領域的企業級開發框架,能夠幫助企業實現複雜的網頁後端服務,這裡不談「Spring 發展史」,就是所謂 "黑暗的 EJB 時代" 進化到 Spring 的那段歷史,每一本介紹 Spring 的書都會寫這段歷史,所以就不贅述了。 Spring 有兩個重要的特性,這兩個特性極大的降低了企業級開發的複雜度。 第一個是 IoC 控制反轉,IoC 是一種設計思想,有了 IoC 之後,專案裡複雜的物件 (Object) 管理工作就擺脫了。 因為在早期開發裡,是直接在物件內部透過 new 的方式建立別的物件,這就相當於間接建立了物件之間的依賴性,而且這些工作要由開發人員自己去維護。 但是,自從有了 IoC 之後,只需要將設計好的物件交給第三方的 IoC 容器進行管理就可以了,而不是在物件內部直接 new 一個其他物件來使用,如下範例。 在 Service 層級建立一個 UserService 物件。 「@Service」是宣告該物件為 Component,當 Spring 啟動後,會開始掃描這些 Component。 ![image alt](https://1.bp.blogspot.com/-vcYTFz684SA/YAeN8MwxQeI/AAAAAAAAADU/061uLnxDi6EQ8PgGUrhx6mamjdR0wMkQgCLcBGAsYHQ/s507/IoC-Service.JPG) 然後,在 Controller 層級建立一個 UserController 物件,將 UserService 物件 Autowired 到 Controller裡面,這時候呼叫 Service 的方法,IoC 就會自動管理。 ![image alt](https://1.bp.blogspot.com/-fiH2g-icKC4/YAeN8CcRzKI/AAAAAAAAADY/Ez8_lF2wmXw6xCH6L4wPf9J0aiBOsrq2ACLcBGAsYHQ/s640/IoC-Controller.JPG) :::info IoC 控制反轉,簡單來說,就是把「產生物件這件事交給 IoC」。 ::: 所以,IoC 的出現可以根據配置文件 (web.xml 或 application.xml),非常方便的幫助我們建立及組裝物件之間的依賴關係,而這也就是 Spring 所謂的 XML 配 Bean (先畫重點,等一下講 Spring Boot的時候會用到)。 第二個特性是 AOP 面向切面編程 (中文很難唸,唸完了也不知道在幹嘛,所以通常都唸英文),這是一個實現程式碼解偶的利器,因為 AOP 可以在不改變原本程式碼或功能流程的情況之下,加入新功能,也算是一種擴展性的表現,其基本原理是「動態代理技術」,跟設計模式 (design pattern) 的「代理模式」理論是一樣的。 以上,就是 Spring 很重要的兩大特性,只要學 Spring 的開發人員,基本上都要懂的這兩大特性。 剛才說到的「根據配置文件 XML 配 Bean」,這個其實也是 Spring 的痛點,只要是利用 Spring 開發專案,隨著項目越來越龐大,就會需要引入很多的配置文件(不只有 web.xml 和 application.xml 之外,還有很多很多的配置文件),除了數量越來越多之外,很多文件其實光是要理解就很困難,也很容易配置錯誤,導致專案莫名其妙就掛掉了。 學 Spring 或 Spring MVC 的初學者,到「XML 配 Bean」這一步常常就被勸退了。 所以,說到 Spring Boot 又跟 Spring 到底哪裡不一樣呢? Spring Boot 是一個全新的框架,他的目的不是為了要取代 Spring,而是為了讓開發者更方便、更簡單的使用 Spring,而 Spring Boot 的第一步就是將原本 Spring 裡複雜的 XML 配 Bean 設定給砍掉了! (非常重要!!! 所以要粗體加畫底線) 同時,這也是 Spring Boot 的核心理念:「約定大於配置」,簡稱 CoC (Convention Over Configuration),其意思是:「開發人員只需要設定專案中那些不符合約定的部分」,而大部分約定成俗的東西,Spring Boot 都已經配置好了。 如此一來,不論想要什麼第三方功能或涵式庫 (Library),透過 Spring Boot 的官網都可以輕鬆構建專案,因為 Spring Boot 已經全自動配置好了,不需要去研究一大堆複雜的配置文件。(相信走過這段路的人,每當想起配置文件,半夜都還會驚醒呢!) 因此,開發模式也發生了巨變,舉例來說,在還沒有 Spring Boot 之前,用 Spring 開發一個 Web 專案,至少要做以下幾件事情: 1. 配置 Maven Dependency 2. 配置 web.xml,加載 Spring 或 Spring MVC 3. 配置 Database Connection 4. 配置 Spring Transaction 5. 配置 logback,或 log4j,或 slf4j ...等伺服器日誌文件 6. 然後 ... ... (以下省略10萬字) 7. 最後還要部屬 Tomcat,開啟 Debug 模式,開始測試 不過,使用 Spring Boot 之後,一切就簡單多了,只需要先用 IDE (Eclipse、IntelliJ...等) 建一個 Spring Boot 專案,配置好 Maven Dependency,基本上就可以啟動了,連 Tomcat 都不用部屬! (當然產品上線還是要部屬,畢竟開發跟上線是兩碼子的事) 之所以 Spring Boot 這麼容易啟動,是因為不管啥東西 Spring Boot 都幫你配置好了,只管寫程式就可以了。 最後,總結一下 Spring Boot 的優勢: 在專案配置方面,極度簡化,把複雜的 XML 配 Bean 給丟掉了,所有的 Bean 都是自動配置、自動注入 在開發方面,Maven Dependency 有各種各樣開箱即用的 Starter 組件 在部屬方面,因為內嵌 Tomcat 容器,不需要再配置複雜的設定,讓專案啟動變得非常容易 OK,以上就是這次的全部內容。👍