日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

理解Spring 容器设计理念

發布時間:2023/12/18 javascript 143 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解Spring 容器设计理念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

Spring是為了解決企業應用程序開發復雜性而創建的開源框架,書店上關于Spring的書籍汗牛充棟,網上相關的文章連篇累牘,其中有很多寫的很不錯的,有入門例子的,有問題解決方案的,有環境設置的,有源代碼分析的,有spring與其他開源系統集成的,不一而足。本文通過生活白話,不拘泥于Spring源代碼和專業術語的束縛,不拘泥于具體的實現細節,類比介紹Spring容器的宏觀的設計理念。

Spring容器解說

Spring容器提供 Spring 框架的基本功能,是工廠模式的實現。換句話說,Spring就是Bean的工廠,管理Bean的生命周期。那如何來設計呢?Spring源代碼雖不說是浩如煙海,也讓人頭暈目眩,如下圖所示,我們讓Spring容器走下神壇,既然是面向接口編程,用接口來描述框架,不必拘泥于具體實現可能更清晰些。

任何的設計都是這樣,有原料,有入口,有加工,也有出口。既然Spring是Bean的容器,是Bean的工廠,那么生產Bean流程是:

1)????????原料:bean的配置文件

2)????????進料:通過ResourceLoaderxml文本文件讀入

3)????????初加工:通過BeanDefinitionReader把原料加工成半成品BeanDefinition

4)????????精加工:Bean的生產車間BeanFactory把半成品BeanDefinition加工成Bean

5)????????入庫:成品庫SingletonRegistry保存成品Bean,及Bean的標簽(beanId),呵呵!你也知道這就是Map的工作了

?

?

?

IOC是Sprng 核心?關鍵?

Spring容器使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開,控制反轉(IOC)模式是基于java反射的基本原理。

通常的軟件設計,肯定把IOC作為容器的核心,其他外圍的功能如bean 的Scope都是基于IOC展開,而Spring設計卻只把它放如工具類BeanUtil,這正是Spring的高明之處,雖然IOC是Spring的創建bean的基礎,但創建一個bean需要判斷是否靜態工廠創建,是否有含參數的構造方法,而這些參數也可能是其他對象的實例,創建bean的初始化方法等等,這些不僅僅是bean的IOC所能涵蓋的,并且在創建一個bean的過程中可能需要多次迭代調用IOC程序。

綜上所述,IOC雖然是Spring的創建Bean的基本原理,但僅是及其重要的一部分,并不是Spring容器的核心,是Spring創建bean的比不可少的工具。IOC是Spring容器的關鍵,而不是核心。

Interface分級設計

接口的分級設計,是針對不同的客戶給予不同級別的產品。不同等級的接口關注點也各有不同,就像產品也分為多個級別,如高級產品、中級產品、初級產品分別對應于不同的客戶群,或者如同銀行的客戶渠道有銀行卡,柜臺,網銀,手機終端,ATM機等等。同樣接口也分為內部接口和外部接口,就如同有些接口可能永遠不被外部用戶所知,僅僅是內部使用,就像工廠內部多個車間之間的內部產品。

org.springframework.beans.factory. BeanFactory是Spring的頂級Interface,其中只有getBean系列,containsBean,isPrototype,isSingleton,getType等成品Bean的基本方法。

org.springframework.beans.factory. ListableBeanFactory是Factory的管理方法如containsBeanDefinition,getBeanDefinitionCount,getBeanDefinitionNames,getBeanNamesForType系列,getBeansOfType系列,ListableBeanFactory是針對BeanDefinition半成品的。

而ApplicationContext接口除了集成ListableBeanFactory接口外,還繼承了ResourcePatternResolver,HierarchicalBeanFactory,ApplicationEventPublisher,MessageSource的功能,如在資源處理(國際化處理),事件傳遞,及各應用層之間的context實現。同樣是對外的接口,Spring更建議采用ApplicationContext的原因也就在這兒,ApplicationContext更像是針對VIP客戶的產品。

?

?

?

?

?

Interface擴展設計

?????? Spring設計是開放性的設計思路,是值得我們做架構設計人員學習的,如下圖所示:

com.springframework.beans.factory

(淡黃色背景)

|BeanFactory

|ListableBeanFactory

|ConfigrableListableBeanFactory

|DefaultListableBeanFactory

?

?

com.springframework.context

(棕紅色背景)

ApplicationContext

????????????????????????????????????????? ?ConfigrableApplicationContext?????

?

?

org.springframework.context

(黃色背景)

.support

AbstractApplicationContext

?????????????????????????????? AbstractRefreshableApplicationContext

?????????????????????????????? AbstractXmlApplicationContext

???????????? ??????????????????ClassPathXmlApplicationContext

?

org.springframework.web.context

(綠色背景)

WebApplicationContext

??????????????????????????? ConfigrableWebApplicationContext

?

org.springframework.web.context

(淺藍色背景)

.support

AbstractRefreshableWebApplicationContext

????????????????????????????????? XmlWebApplicationContext

?

?

?

?

?

?

總結如下:

1)??不同的包下面放不同的東西,好像是廢話啊!上層包放接口,下層包放實現的抽象類及實體類。如contex.support包下面放實現context包下面的接口的抽象類及實現類。

2)??為了適應WEB級別的ApplicationContext,創建了WebApplicationContext的接口,該接口繼承了ApplicationContext,又添加了WEB層的個性化方法如getServletContext及屬性。現在終于明白了在接口間的“extends”的含義,絕對是對上層接口的“擴展“,擴展的目的是適應更具體化的環境。就如同因為國家大,情況復雜,中央的政策相對都是比較抽象的,而地方政策必須結合地方的特色,既要滿足中央政策的要求,即實現中央政策的接口,又要根據本地特殊情況,擴展個性化的政策,即地方政策接口,從而更具有可操作性。

3)?org.springframework.web.context.support.AbstractRefreshableWebAppplicationContext類是既實現了ConfigrableWebApplicationContext接口,即實現WEB的個性化特色,又繼承了org.springframework.context.support.AbstractRefreshableApplicationContext類。借助了已有的類,實現了架構上的復用,這就像制定政策既要滿足地方上的特色,又可以參照其他地區現成的政策經驗。呵呵!在實際工作中,也會常常有這樣的設計。

總結

以上是生活随笔為你收集整理的理解Spring 容器设计理念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。