成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

springIOC是什么及有哪些設(shè)計模式

這篇文章主要介紹“spring IOC是什么及有哪些設(shè)計模式”,在日常操作中,相信很多人在spring IOC是什么及有哪些設(shè)計模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spring IOC是什么及有哪些設(shè)計模式”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司憑借專業(yè)的設(shè)計團(tuán)隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都網(wǎng)站設(shè)計、成都做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10多年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都超過千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。

springIOC及設(shè)計模式

一.IOC的概念:

控制反轉(zhuǎn)(inversion of control)和依賴注入(dependency injection)其實是同一個概念。當(dāng)某個方法需要另外一個對象協(xié)助的時候,傳統(tǒng)的方法就是有調(diào)用者來通過new創(chuàng)建被調(diào)用者的實例,但是在spring中創(chuàng)建被調(diào)用者的工作不再有調(diào)用者來完成,稱之為控制反轉(zhuǎn)(ioc)。創(chuàng)建被調(diào)用者的工作由spring來完成,然后注入調(diào)用者,成為依賴注入。

這樣做得目的當(dāng)然是為了解耦,減低類之間得耦合度,其設(shè)計思想就是設(shè)計模式中得工廠模式。在spring容器啟動得時候,spring會將配置項中配置好得bean都初始化。需要調(diào)用得時候,把初始化得bean分配給調(diào)用的類,而不需要手動創(chuàng)建一個對象實例。

對于springIOC來說由兩處地方最重要,一個是創(chuàng)建bean容器,一個是初始化bean。

二.SpringIOC的頂層接口:

spring IOC是什么及有哪些設(shè)計模式

在Sping IoC的體系結(jié)構(gòu)中BeanFactory作為最頂層的一個接口類,它定義了IoC容器的基本功能規(guī)范。并且為了區(qū)分在 Spring 內(nèi)部在操作過程中對象的傳遞和轉(zhuǎn)化過程中,對對象的數(shù)據(jù)訪問做限制,使用了多層接口ListableBeanFactory 接口表示這些 Bean 是可列表的. HierarchicalBeanFactory 表示的是這些 Bean 是有繼承關(guān)系的,也就是每個Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定義 Bean 的自動裝配規(guī)則。

默認(rèn)實現(xiàn)類是 DefaultListableBeanFactory,他實現(xiàn)了所有的接口.

在springIOC中用到的設(shè)計模式有四種:工廠模式,單例模式,策略模式,裝飾者模式。

一.工廠模式      

Spring IOC容器就像是一個工廠一樣,當(dāng)我們需要創(chuàng)建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創(chuàng)建出來的。IOC 容器負(fù)責(zé)創(chuàng)建對象,將對象連接在一起,配置這些對象,并從創(chuàng)建中處理這些對象的整個生命周期(多例的對象spring不會管理生命周期),直到它們被完全銷毀。

     Spring使用工廠模式可以通過BeanFactory或者ApplicationContext創(chuàng)建bean對象。

      BeanFactory:延遲注入(spring默認(rèn)為懶加載,即使用到某個bean的時候才會注入,可以通過@Lazy(false)設(shè)置為非懶加載)。相比于ApplicationContext來說會占用更少的內(nèi)存。

      ApplicationContext:容器啟動的時候,不管有沒有用到,一次性創(chuàng)建所有的bean,ApplicationContext繼承了BeanFactory,除了BeanFactory的功能外還有額外的更多功能,所以一般使用的更多。

二.單例模式

      Spring 中 bean 的默認(rèn)作用域就是 singleton(單例)的。Spring中實現(xiàn)單例的方式有兩種:

xml : <bean id="userService" class="top.snailclimb.UserService" scope="singleton"/>

注解:@Scope(value = "singleton")

除了singleton作用域,Spring中bean還有下面幾種作用域:

      prototype : 每次請求都會創(chuàng)建一個新的 bean 實例。

     request : 每一次HTTP請求都會產(chǎn)生一個新的bean,該bean僅在當(dāng)前HTTP request內(nèi)有效。

     session : 每一次HTTP請求都會產(chǎn)生一個新的 bean,該bean僅在當(dāng)前 HTTP session 內(nèi)有效。

     global-session: 全局session作用域,僅僅在基于portlet的web應(yīng)用中才有意義,Spring5已經(jīng)沒有了。Portlet是能夠生成語義代碼(例如:HTML)片段的小型Java Web插件。它們基于portlet容器,可以像servlet一樣處理HTTP請求。但是,與 servlet 不同,每個 portlet 都有不同的會話。

三. 策略模式

    在spring中通過ApplicationContext 來獲取Resource的實例,包括urlResource,classPathResource,fileSystenResource等不同的資源類型,spring針對不同的資源類型采取不同的訪問策略。ApplicationContext 將會負(fù)責(zé)選擇 Resource 的實現(xiàn)類,也就是確定具體的資源訪問策略,從而將應(yīng)用程序和具體的資源訪問策略分離開來。

四. 裝飾者模式

裝飾者模式可以動態(tài)地給對象添加一些額外的屬性或行為。相比于使用繼承,裝飾者模式更加靈活。簡單點兒說就是當(dāng)我們需要修改原有的功能,但我們又不愿直接去修改原有的代碼時,設(shè)計一個Decorator套在原有代碼外面。其實在 JDK 中就有很多地方用到了裝飾者模式,比如 InputStream家族,InputStream 類下有 FileInputStream (讀取文件)、BufferedInputStream (增加緩存,使讀取文件速度大大提升)等子類都在不修改InputStream 代碼的情況下擴(kuò)展了它的功能。

Spring中類中帶有Wrapper的都是包裝類。

到此,關(guān)于“spring IOC是什么及有哪些設(shè)計模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

標(biāo)題名稱:springIOC是什么及有哪些設(shè)計模式
標(biāo)題鏈接:http://jinyejixie.com/article18/jdopgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、云服務(wù)器、外貿(mào)建站、網(wǎng)站改版、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
克山县| 望奎县| 龙口市| 长顺县| 石狮市| 金塔县| 依安县| 麻城市| 江永县| 景宁| 深水埗区| 光泽县| 阳山县| 凭祥市| 贵定县| 凤阳县| 四川省| 桐乡市| 镇江市| 彰武县| 深水埗区| 景宁| 万盛区| 宿迁市| 连州市| 营口市| 米林县| 肥东县| 加查县| 扬州市| 南川市| 江华| 峡江县| 互助| 灌南县| 开平市| 连山| 白城市| 南岸区| 东乌| 多伦县|