Spring Boot 原理解析 預備篇

2021-10-07 15:17:10 字數 2665 閱讀 9957

spring boot是為了簡化spring開發而對spring的進一步封裝,是對spring的增強。要弄清楚spring boot,首先需要弄清楚spring boot與spring的使用,到底簡化了那些東西,spring boot對spring封裝時使用了spring的那些東西。我們分別以原生spring mvc和使用spring boot的spring mvc為例,檢視spring boot到底怎麼簡化spring開發的。

在使用原生spring mvc開發時,我們需要逐個引入spring-core,spring-webmvc,spring-webmvc,spring-context等一系列spring提供的jar包,如果再涉及到資料庫,redis等還需要逐個引入與資料庫和redis相關的jar包。使用spring boot之後,我們只需要引入spring-boot-starter-web就可以建立乙個最簡單的web應用。如果涉及到資料庫或者其他第三方外掛程式,只需要引入對應的starter包即可,比如:spring-boot-starter-data-jpa,spring-boot-starter-data-redis等,更多starter包可以檢視spring 官網。

不使用spring boot開發時,我們需要一系列繁複的配置,首先是web.xml配置。然後是spring.xml配置。我們需要在web.xml中配置dispatcherservlet,characterencodingfilter以及其他過濾器,配置spring.xml的位置contextconfiglocation。在spring.xml中需要配置大量的bean。

org.springframework.web.servlet.view.internalresourceview

如下為spring.xml配置簡單案例,這只是一部分配置,如果涉及到資料庫,快取,許可權控制,需要配置的更多。而spring boot,則是不需要這麼多bean的配置,甚至不需要web.xml配置。在引入對應的starter包之後,配置相應的properties或者yml配置檔案即可。spring boot會根據引入starter個properties配置自動注入bean。如下是spring boot使用mybatis-plus的配置。

server:

port: 9009

spring:

name: mybatisplus-starter

datasource:

filters: stat,wall,slf4j

initialsize: 5

maxactive: 20

maxpoolpreparedstatementperconnectionsize: 20

maxwait: 60000

minevictableidletimemillis: 300000

minidle: 5

poolpreparedstatements: true

testonborrow: false

testonreturn: false

testwhileidle: true

timebetweenevictionrunsmillis: 60000

type: com.alibaba.druid.pool.druiddatasource

url: jdbc:mysql://localhost:3306/mybatisplus?allowmultiqueries=true&useunicode=true&characterencoding=utf-8&usessl=false

username: root

password: 123456

connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=5000;password=$

driverclassname: com.mysql.jdbc.driver

validationquery: select 1 from dual

mybatis-plus:

configuration:

cache-enabled: false

map-underscore-to-camel-case: true

global-config:

db-column-underline: true

field-strategy: 0

id-type: 0

typealiasespackage: cn.org.microservice.mybatisplus.starter

其實spring boot做的主要是bean的自動配置和較少依賴的引入,而核心是bean的自動配置。也是後面我們講的重點,在介紹bean的自動配置之前,我們需要了解spring註解驅動開發的知識:比如@componentscan,@bean,@conditional,@primary,@propertysource,@propertysources,@profile,@enable***,***aware,@configuration,@import,@importresource以及aop註解等的使用,關鍵是熟悉spring的原理以及設計模式。spring boot在自動裝配中很多都是用這寫註解或者增強這些註解來完成的。如果掌握了這些註解,你就也可以編寫自己的starter包。後續原始碼解析中,用到spring原理的內容會寫到spring專欄中,spring boot內部寫到spring boot專欄

對於DNS預解析的理解

什麼是 dns prefetch dns 實現網域名稱到ip的對映。通過網域名稱訪問站點,每次請求都要做dns解析。目前每次dns解析,通常在200ms以下。針對dns解析耗時問題,一些瀏覽器通過dns prefetch 來提高訪問的流暢性。dns prefetch 是一種dns 預解析技術,當瀏覽...

LCD原理解析

硬體體系 3個部分 lcd液晶 屏 lcd驅動晶元 lcd控制器 整合在arm晶元內部 控制器 通過驅動晶元 控制液晶屏 液晶屏種類 stn gf tft tft 在嵌入式中較為常用 lcd控制器結構與模組 由17個可程式設計的暫存器組和一塊 256 16的調色盤內 存組成,通過這些暫存器,可以配置...

session原理解析

首先session跟cookies都是會會話進行跟蹤,session通過在伺服器端記錄資訊來記錄,cookies通過在客戶端記錄資訊來記錄。在此只對session進行分析 session是記錄在伺服器記憶體中的,每當乙個使用者通過瀏覽器第一次進行訪問時進行建立 需要注意只有訪問jsp,servlet...