Springboot兩要素

disable發表於2021-09-09

為什麼需要有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開箱即用的元件了。要達到的效果大致如下:


圖片描述

RPC配置類

圖片描述

服務提供類



作者:真海
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/200/viewspace-2818148/,如需轉載,請註明出處,否則將追究法律責任。

相關文章