Spring中的八大模式簡單介紹
一:Spring中的八大模式
Spring中的八大模式,有很多我們前面已經(jīng)講過了,這里只需要大概有個印象,后期會出一個專門對23種設計模式的詳解!
1. 簡單工廠模式
BeanFactory的getBean()方法,通過唯一標識來獲取Bean對象。是典型的簡單工廠模式(靜態(tài)工廠模式);主要包括三部分:抽象產(chǎn)品角色、具體產(chǎn)品角色、工廠類角色;這個靜態(tài)方法所在的工廠類相當于一個上帝類,或者說全能類,所有產(chǎn)品一個工廠,一旦出現(xiàn)故障,整個系統(tǒng)就會癱瘓;并且不符合OCP開閉原則。不屬于23種設計模式!
2. 工廠方法模式
FactoryBean是典型的工廠方法模式;主要包括四部分:抽象產(chǎn)品角色、具體產(chǎn)品角色、抽象工廠角色、具體工廠角色;符合OCP開閉原則,但是存在類爆炸問題!在配置文件中通過factory-method屬性來指定工廠方法,該方法是一個實例方法。
3. 單例模式
Spring用的是雙重判斷加鎖的單例模式;單列模式的實現(xiàn),包括餓漢式和懶漢式;請看下面代碼,我們之前講解Bean的循環(huán)依賴的時候見過:
4. 代理模式
代理模式包括靜態(tài)代理和動態(tài)代理,動態(tài)代理又包括JDK動態(tài)代理(只能代理接口)和CJLIB動態(tài)代理(類和接口都可以代理)。Spring的面向切面AOP就是使用了動態(tài)代理實現(xiàn)的!
5. 裝飾器模式
JavaSE中的IO流是非常典型的裝飾器模式!
Spring 中配置 DataSource 的時候,這些dataSource可能是各種不同類型的,比如不同的數(shù)據(jù)庫:Oracle、SQL Server、MySQL等,也可能是不同的數(shù)據(jù)源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。
這時,能否在盡可能少修改原有類代碼下的情況下,做到動態(tài)切換不同的數(shù)據(jù)源?此時就可以用到裝飾者模式。
Spring根據(jù)每次請求的不同,將dataSource屬性設置成不同的數(shù)據(jù)源,以到達切換數(shù)據(jù)源的目的。
Spring中類名中帶有:Decorator和Wrapper單詞的類,都是裝飾器模式。
6. 觀察者模式
定義對象間的一對多的關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。
Spring中觀察者模式一般用在listener(監(jiān)聽器)的實現(xiàn)。Servlet的ServletContextListener就是一個觀察者模式:其中ServletContextListener就是觀察者、ServletContext就是被觀察者、ServletContext對象被創(chuàng)建或ServletContext對象被銷毀等就是事件。
Spring中的事件編程模型就是觀察者模式的實現(xiàn)。在Spring中定義了一個ApplicationListener接口,用來監(jiān)聽Application的事件,Application其實就是ApplicationContext,ApplicationContext內(nèi)置了幾個事件,其中比較容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent
7. 策略模式
策略模式是行為性模式,調(diào)用不同的方法,適應行為的變化 ,強調(diào)父類的調(diào)用子類的特性 。
getHandler是HandlerMapping接口中的唯一方法,用于根據(jù)請求找到匹配的處理器。
比如:我們自己寫了AccountDao接口,然后這個接口下有不同的實現(xiàn)類:AccountDaoForMySQL,AccountDaoForOracle。對于service來說不需要關(guān)心底層具體的實現(xiàn),只需要面向AccountDao接口調(diào)用,底層可以靈活切換實現(xiàn),這就是策略模式!
8. 模板方法模式
Spring中的JdbcTemplate類就是一個模板類。它就是一個模板方法設計模式的體現(xiàn)。在模板類的模板方法execute中編寫核心算法,具體的實現(xiàn)步驟在子類中完成。
到此這篇關(guān)于Spring中的八大模式簡單介紹的文章就介紹到這了,更多相關(guān)Spring八大模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java基礎(chǔ)之初始化ArrayList時直接賦值的4種方式總結(jié)
ArrayList是Java中的一個類,它是Java集合框架中的一部分,用于實現(xiàn)動態(tài)數(shù)組,下面這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)之初始化ArrayList時直接賦值的4種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07Springboot整合quartz實現(xiàn)多個定時任務實例
這篇文章主要介紹了Springboot整合quartz實現(xiàn)多個定時任務代碼實例,Quartz?是一款功能強大的開源任務調(diào)度框架,幾乎可以集成到任何?Java?應用程序中,Quartz?可用于創(chuàng)建簡單或復雜的任務調(diào)度,用以執(zhí)行數(shù)以萬計的任務,需要的朋友可以參考下2023-08-08Spring?Boot?微服務中集成?MyBatis-Plus?與集成原生?MyBatis在配置上的不同
在Spring?Boot微服務中,MyBatis-Plus通過其Boot?Starter和豐富的配置屬性,極大的簡化了MyBatis的集成和配置工作,尤其是對于全局設置和常用插件的使用,本文給大家介紹Spring?Boot?微服務中集成?MyBatis-Plus與集成原生?MyBatis?有哪些配置上的不同,感興趣的朋友一起看看吧2025-04-04Java中toString()、String.valueOf、(String)強轉(zhuǎn)區(qū)別
相信大家在日常開發(fā)中這三種方法用到的應該很多,本文主要介紹了Java中toString()、String.valueOf、(String)強轉(zhuǎn)區(qū)別,感興趣的可以了解一下2021-09-09打開.properties中文顯示unicode編碼問題以及解決
這篇文章主要介紹了打開.properties中文顯示unicode編碼問題以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01SpringBoot如何訪問不同的數(shù)據(jù)庫的方法實現(xiàn)
本文主要介紹了在SpringBoot應用中配置和管理多個數(shù)據(jù)源的方法,包括使用SpringBoot官方支持的配置方式和第三方庫實現(xiàn)多數(shù)據(jù)源配置,感興趣的可以了解一下2024-11-11