Springboot兩要素

爲什麼需要有Springboot,我們知道一些腳本語言框架在web應用開發方面非常方便,比如常見的ROR,Node,php等,而使用tomcat開發一個簡單的hello world的頁面服務器就需要做很多配置,儘管可以使用之前的SSH web三劍客,但也仍然比較麻煩。Springboot通過開箱即用的組件化的方式簡化了這一切,讓javaer也可以享受到腳本語言一樣的快速高效。

Springboot如何實現開箱即用的。我們知道Springboot是基於Spring框架,要實現開箱即用,有兩點比較重要,第一,可以自動將組件加載到Spring容器中;第二,提供一種默認配置,同時也可以進行自定義。這樣在引入一個組件之後,系統自動加載代碼與默認配置,無需任何其他操作就可以直接使用,如何有特殊需求,可以修改配置來進行自定義。

首先第一點,自動加載Bean主要是利用SpringFactoriesLoader,類似Java SPI機制,我們在很多其他地方也常常見到,比如Logger,java中的logging會根據引入的jar包中的logfactory文件來查找目前使用的logger框架,同樣,Springboot也會查找當前路徑下jar中各個starter中的spring.factories文件,找到每個組件的擴展信息,例如ApplicationContextInitializer,ApplicationListener,EnableAutoConfiguration等,其中EnableAutoConfiguration非常重要,Springboot會將所有的查找到的EnableAutoConfiguration加載到容器中,這樣可以完成組件的初始化,Bean加載等操作了。其次每個組件會設置一套需要的配置數據元數據,並且一般都會有一套默認數據,而且用戶還可以在application.properties中進行自定義,最小化簡化用戶配置。

例如如果要爲一個RPC框架提供一個Springboot的組件,可以直接引入starter就可以使用,應該如何實現呢。

我們可以爲RPC的服務端與消費端分別定義一個註解:@Provider 與@Consumer,  每個註解裏面會有一些服務需要的參數,例如版本號,超時時間等,然後新增一個RPCEnableAutoConfiguration,讓RPCEnableAutoConfiguration中首先初始化RPC需要的一些信息,例如與地址註冊服務器的鏈接等,然後掃描容器中的所有帶有@Provider 與@Consumer中的Bean或者字段信息,然後根據每個註解中的信息生成RPC需要的Bean並註冊到容器,這樣就實現了一個RPC開箱即用的組件了。要達到的效果大致如下:



參考文獻:

https://www.cnblogs.com/zheting/p/6707035.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章