個(gè)人網(wǎng)站策劃書怎么做seo推廣排名重要嗎
一、spring體系
1. spring是什么?
輕量級(jí)的開源的J2EE框架。它是一個(gè)容器框架,主要實(shí)現(xiàn)了ioc,同時(shí)又通過(guò)aop實(shí)現(xiàn)了面向切面編程,它又是一個(gè)中間層框架(萬(wàn)能膠)可以起一個(gè)連接作用,比如說(shuō)把mybatis和spring mvc粘合在一起運(yùn)用,可以讓我們的企業(yè)開發(fā)更快、更簡(jiǎn)潔
二. 設(shè)計(jì)模式
1.簡(jiǎn)單工廠模式
Spring中的BeanFactory就是簡(jiǎn)單工廠模式的體現(xiàn),根據(jù)傳入一個(gè)唯一的標(biāo)識(shí)來(lái)獲得Bean對(duì)象,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個(gè)要根據(jù)具體情況來(lái)定,即是否是使用懶加載。
如:BeanFactory接口獲取bean和Spring在jvm啟動(dòng)時(shí)創(chuàng)建bean實(shí)列及對(duì)應(yīng)映射關(guān)系工廠。
2.抽象工廠模式
抽象工廠方法模式說(shuō)白了其實(shí)就是簡(jiǎn)單工廠模式的一種升級(jí)或者說(shuō)是進(jìn)一步抽象,它可以應(yīng)用于更加復(fù)雜的場(chǎng)景,靈活性也更高。在簡(jiǎn)單工廠中,由工廠類進(jìn)行所有的邏輯判斷、實(shí)例創(chuàng)建;如果不想在工廠類中進(jìn)行判 斷,可以為不同的產(chǎn)品提供不同的工廠,不同的工廠生產(chǎn)不同的產(chǎn)品,每一個(gè)工廠都只對(duì)應(yīng)一個(gè)相應(yīng)的對(duì) 象,這就是抽象工廠方法模式。
Spring中的FactoryBean就是這種思想的體現(xiàn),FactoryBean可以理解為工廠Bean,先來(lái)看看它的定義:
我們定義一個(gè)類UserFactoryBean來(lái)實(shí)現(xiàn)FactoryBean接口,主要是在getObject方法里new一個(gè)User對(duì)象。
這樣我們通過(guò)getBean(id) 獲得的是該工廠所產(chǎn)生的User的實(shí)例,而不是UserFactoryBean本身的實(shí)例,像 下面這樣:?
?
3.單例模式
單例模式是指一個(gè)類在整個(gè)系統(tǒng)運(yùn)行過(guò)程中,只允許產(chǎn)生一個(gè)實(shí)例。
在Spring中,Bean可以被定義為兩種 模式:prototype(多例)和singleton(單例),Spring Bean默認(rèn)是單例模式。
那Spring是如何實(shí)現(xiàn)單例模 式的呢?
答案是通過(guò)單例注冊(cè)表的方式,保證一個(gè)類僅會(huì)創(chuàng)建一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。具體來(lái)說(shuō)就是使用了HashMap。
請(qǐng)注意為了方便你閱讀,我對(duì)代 碼進(jìn)行了簡(jiǎn)化:
上面的代碼邏輯比較清晰,先到HashMap去拿單實(shí)例對(duì)象,沒拿到就創(chuàng)建一個(gè)添加到HashMap。
提供了全局的訪問(wèn)點(diǎn)BeanFactory。同時(shí)在創(chuàng)建時(shí)也保證只會(huì)創(chuàng)建一個(gè)對(duì)象。
那如何保證的?
spring會(huì)判斷bean的作用域是否為單例,如果是,則會(huì)從單列池緩存中(一般為hashmap的數(shù)據(jù)結(jié)構(gòu))直接取,如果為空,則創(chuàng)建對(duì)于的對(duì)象。
4.代理模式
主要是在aop中體現(xiàn)。
Spring的AOP采用的是動(dòng)態(tài)代理的方式,而動(dòng)態(tài)代理就是指代理類在程序運(yùn)行時(shí)由JVM動(dòng)態(tài)創(chuàng)建。
Spring實(shí)現(xiàn)了通過(guò)動(dòng)態(tài)代理對(duì)類進(jìn)行方法級(jí)別的切面增強(qiáng),切面在應(yīng)用運(yùn)行的時(shí)刻被織入。一般情況下,在織入切面時(shí),AOP容器會(huì)為目標(biāo)對(duì)象動(dòng)態(tài)的創(chuàng)建一個(gè)代理 對(duì)象。并在代理類的方法中設(shè)置攔截器,通過(guò)執(zhí)行攔截器中的邏輯增強(qiáng)了代理方法的功能,從而實(shí)現(xiàn) AOP
判斷是否創(chuàng)建代理對(duì)象會(huì)根據(jù)配置的切點(diǎn)進(jìn)行過(guò)濾。
代理模式的好處是,可以在目標(biāo)對(duì)象業(yè)務(wù)功能的基礎(chǔ)上添加一些公共的邏輯,比如我們想給目標(biāo)對(duì)象加入日 志、權(quán)限管理和事務(wù)控制等功能,我們就可以使用代理類來(lái)完成,而沒必要修改目標(biāo)類,從而使得目標(biāo)類保 持穩(wěn)定。這其實(shí)是開閉原則的體現(xiàn),不要隨意去修改別人已經(jīng)寫好的代碼或者方法。
5.觀察者模式
spring的事件驅(qū)動(dòng)模型使用的是觀察者模式,即spring使用到的事件機(jī)制。
Spring中Observer模式常用的地方是listener的實(shí)現(xiàn)。
詳情可參考我的博客:
Spring Events事件機(jī)制_spring evnet原因-CSDN博客
6.模板模式?
父類定義了骨架(調(diào)用哪些方法及順序),某些特定方法由子類實(shí)現(xiàn)。
最大的好處:代碼復(fù)用,減少重復(fù)代碼。除了子類要實(shí)現(xiàn)的特定方法,其他方法及方法調(diào)用順序都在父類中預(yù)先寫好了。
比如:refresh方法
3.適配器模式,待續(xù)
Spring定義了一個(gè)適配接口,使得每一種Controller有一種對(duì)應(yīng)的適配器實(shí)現(xiàn)類,讓適配器代替 controller執(zhí)行相應(yīng)的方法。這樣在擴(kuò)展Controller時(shí),只需要增加一個(gè)適配器類就完成了SpringMVC 的擴(kuò)展了。
策略模式????
Spring框架的資源訪問(wèn)Resource接口。該接口提供了更強(qiáng)的資源訪問(wèn)能力,Spring 框架本身大量使用了 Resource 接口來(lái)訪問(wèn)底層資源。
裝飾器模式
動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),Decorator模式相比生成子類更為靈活。