国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式_spring框架中常用的8種設(shè)計模式

這篇具有很好參考價值的文章主要介紹了設(shè)計模式_spring框架中常用的8種設(shè)計模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

spring框架中常用到的8種設(shè)計模式清單如下:

設(shè)計模式

使用地方

備注

工廠模式

BeanFactory
ApplicationContext

單例模式

Spring中的Bean

代理模式

Spring AOP

java反射實現(xiàn)動態(tài)代理

模板方法模式

Spring中以Template結(jié)尾的類

使用繼承的方式實現(xiàn)

觀察者模式

Spring事件驅(qū)動模型

適配器模式

Spring AOP中的AdvisorAdapter
Spring MVC中的HandlerAdapter

裝飾器模式

Spring中含有Wrapper和含有Decorator的類

策略模式

資源訪問Resource接口

一、工廠模式

  • Spring框架中BeanFactoryApplicationContext類使用工廠模式創(chuàng)建Bean對象

1BeanFactory

是一種懶漢模式,即使用到某個Bean時才會進行注入和ApplicationContext相比會占用更少的內(nèi)存,程序啟動速度更快

2、ApplicationContext

是一種惡漢模式,容器啟動時就創(chuàng)建所有的Bean和BeanFactory相比 ,BeanFactory僅提供了最基本的依賴注入支持 . ApplicationContext擴展了BeanFactory, 除了BeanFactory的功能外還包含其余更多的功能,通常使用ApplicationContext創(chuàng)建BeanApplicationContext的三個實現(xiàn)類: ClassPathXmlApplication: 將上下文文件作為類路徑資源

FileSystemXmlApplication: 從文件系統(tǒng)中的XML文件中載入上下文定義信息

XmlWebApplicationContext: 從Web系統(tǒng)中的XML文件中載入上下文定義信息

二、單例模式

Spring中的Bean的作用域默認就是單例Singleton的 . Spring中的Bean還可以定義以下作用域: prototype: 每次請求都會創(chuàng)建一個新的Bean實例

request: 每一次HTTP請求都會創(chuàng)建一個新的Bean實例,該Bean實例僅在當前HTTP request中有效 session: 每一次HTTP請求都會創(chuàng)建一個新的Bean實例,該Bean實例僅在當前HTTP session中有效

Spring實現(xiàn)單例Bean的方式:

xml的方式: <bean id="bean" class="com.oxford.Bean" scope="singleton"/>

????? 注解的方式: @Scope(value="singleton")

Spring底層通過ConcurrentHashMap實現(xiàn)單例注冊表來實現(xiàn)單例模式:

Java
// 通過線程安全的concurrentHashMap實現(xiàn)單例注冊表
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);
?
public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) {
??????? Assert.notNull(beanName, "'beanName' must not be null");
??????? synchronized(this.singletonObjects) {
??????????????? // 檢查緩存中是否存在實例
??????????????? Object singletonObject = this.singletonObjects.get(beanName);
??????????????? if (singletonObject == null) {
??????????????????????? ...
??????????????????????? try {
??????????????????????????????? singleton = singletonFactory.getObject();
??????????????????????? }
??????????????????????? ...
???????????? ???????????// 如果實例對象不存在,則將對象注冊到單例注冊表中
??????????????????????? addSingleton(beanName, singletonObject);
??????????????? }
??????????????? return (singletonObject != NULL_OBJECT ? singletonObject : null);
??????? }
}
?
protected void addSingleton(String beanName, Object singletonObject) {
??????? synchronized(this.singletonObjects) {
??????????????? this.singletonObjects.put(beanName, (singletonObject != null ? singletonObject : NULL_OBJECT));
??????? }
}

三、代理模式

面向切面編程AOP: Aspect-Oriented Programming 面向切面編程能夠?qū)⒑蜆I(yè)務無關(guān),但是是業(yè)務模塊中所共同調(diào)用的邏輯或者業(yè)務功能封裝起來, 比如事務管理,日志管理,權(quán)限控制等 有利于減少重復代碼,降低模塊之間的耦合度,并有利于面向未來的可拓展性和可維護性 使用AOP可以將一些通用功能抽象出來,在需要使用的地方直接使用,這樣可以大大簡化代碼量 需要增加新功能也會更加簡單方便,這樣可以提高系統(tǒng)的擴展性

Spring AOP基于動態(tài)代理實現(xiàn)的: 代理對象實現(xiàn)了接口: Spring AOP會使用Java動態(tài)代理JDK Proxy創(chuàng)建代理對象 完成對象的代理操作 代理對象沒有實現(xiàn)接口: Spring AOP會使用Cglib Proxy生成一個被代理對象的子類作為代理類完成對象的代理操作

設(shè)計模式_spring框架中常用的8種設(shè)計模式

Spring AOP集成了AspectJ,AspectJJava中最為完整的AOP框架

AspectJSpring AOP比較

AspectJ

AspectJ是編譯時增強

AspectJ基于字節(jié)碼操作Bytecode Manipluation實現(xiàn)

AspectJ在切面較多的情況下要比Spring AOP的性能強很多

Spring AOP

Spring AOP是運行時增強

Spring AOP基于代理Proxy實現(xiàn)

Spring AOP中集成了AspectJ

Spring AOP比較簡單,在切面比較少的情況下和AspectJ的性能相似

四、模板模式

  • 模板方法模式: 是一種行為型模式,基于繼承的代碼復用 定義一個操作的算法骨架,將一些實現(xiàn)步驟延遲到子類中 模板方法使得子類可以不改變一個算法結(jié)構(gòu)的情況下即可重新定義算法的某些特定步驟的實現(xiàn)方式
  • Spring中以Template結(jié)尾的類,比如jdbcTemplate等,都是使用了模板方法模式 通常情況下,都是使用繼承來實現(xiàn)模板模式 在Spring中,使用了Callback與模板方法相結(jié)合的方式,既達到了代碼復用的效果,又增加了系統(tǒng)的靈活性

設(shè)計模式_spring框架中常用的8種設(shè)計模式

五、觀察者模式

觀察者模式: 是一種對象行為模式 表示的是一種對象和對象之間具有依賴關(guān)系,當一個對象發(fā)生改變,依賴于這個對象的對象也會發(fā)生改變

Spring事件驅(qū)動模型就是基于觀察者模式實現(xiàn)的 Spring事件驅(qū)動模型可以在很多應用場景中解耦代碼 比如每次添加商品時都需要更新商品索引,這時就可以使用觀察者模式

Spring事件驅(qū)動模型

  • Spring事件驅(qū)動模型包含三種角色: 事件Event角色 事件監(jiān)聽者Listener角色 事件發(fā)布者Publisher角色

Spring事件流程

1、定義一個事件: 實現(xiàn)一個繼承自ApplicationEvent的事件類,并寫出相應的構(gòu)造函數(shù)

2、定義一個事件監(jiān)聽者: 實現(xiàn)ApplicationListener接口 重寫onApplicationEvent() 方法

3、使用事件發(fā)布者發(fā)布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重寫publishEvent() 方法發(fā)布消息

事件角色Event

ApplicationEvent: org.springframework.context 事件角色抽象類 繼承java.util.Event并實現(xiàn)了java.io.Serializable接口

Spring中默認存在以下事件,都是繼承自ApplicationContext事件角色抽象類: ContextStartedEvent: ApplicationContext啟動后觸發(fā)的事件 ContextStoppedEvent: ApplicationContext停止后觸發(fā)的事件 ContextRefreshedEvent: ApplicationContext初始化或者刷新后觸發(fā)的事件 ContextClosedEvent: ApplicationContext關(guān)閉后觸發(fā)的事件

事件監(jiān)聽者角色Listener

ApplicationListener: 事件監(jiān)聽者角色 ApplicationListener接口中定義了一個onApplicationEvent() 方法來處理ApplicationEvent. 只要實現(xiàn)onApplicationEvent() 方法即可完成監(jiān)聽事件

事件發(fā)布者角色Publisher

ApplicationEventPublisher: 事件發(fā)布者角色 ApplicationEventPublisher接口中定義了publishEvent() 方法來發(fā)布事件,這個方法在AbstractApplicationContext中實現(xiàn) 在AbstractApplicationContext中,事件是通過ApplicationEventMulticaster廣播的

六、適配器模式

  • 適配器模式: 是結(jié)構(gòu)型模式,也是各種結(jié)構(gòu)型模式的起源 將一個接口轉(zhuǎn)換為調(diào)用方需要的接口 適配器使得接口不兼容的類之間可以一起工作.適配器又被稱為包裝器Wrapper

Spring AOP中的適配器模式

  • Spring AOP中的增強和通知Advice使用了適配器模式,接口是AdvisorAdapter
  • 常用的Advice類型包括: BeforeAdvice: 前置通知. 目標方法調(diào)用前增強 AfterAdvice: 后置通知. 目標方法調(diào)用后增強 AfterReturningAdvice: 目標方法執(zhí)行結(jié)束之后 ,return之前
  • 每個通知Advice都有對應的攔截器: BeforeAdvice - MethodBeforeAdviceInterceptor AfterAdvice - MethodAfterAdviceInterceptor AfterReturningAdvice - MethodAfterReturningAdviceInterceptor
  • Spring中預定義的通知要通過對應的適配器,適配成為MethodInterceptor接口類型的對象

Spring MVC中的適配器模式文章來源地址http://www.zghlxwxcb.cn/news/detail-401856.html

  • Spring MVC中 ,DispatchServlet根據(jù)請求信息調(diào)用HanlderMapping, 解析請求對應的Handler, 解析到對應的Handler后,開始由HandlerAdapter適配器進行處理
  • HandlerAdapter作為期望接口,具體的適配器實現(xiàn)類對具體目標類進行適配 .controller作為需要適配的類
  • 通過使用適配器AdapterHandler可以對Spring MVC中眾多類型的Controller通過不同的方法對請求進行處理

七、裝飾器模式

  • 裝飾器模式: 動態(tài)地給對象添加一些額外的屬性或者行為 和繼承相比,裝飾器模式更加靈活
  • 裝飾器模式使用場景: 當需要修改原有的功能,但是不想直接修改原有的代碼,就可以設(shè)計一個裝飾器Decorator類在原有的代碼的外面,這樣可以在不修改原有的類的基礎(chǔ)上擴展新的功能
  • Spring中配置DataSource時 ,DataSource可以是不同的數(shù)據(jù)庫和數(shù)據(jù)源.為了在少修改原有類的代碼下動態(tài)切換不同的數(shù)據(jù)源,這時就用到了裝飾器模式
  • Spring中含有Wrapper和含有Decorator的類都用到了裝時期模式,都是動態(tài)地給一個對象添加一些額外的屬性或者功能

八、策略模式

  • 在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設(shè)計模式屬于行為型模式。
  • 在策略模式中,我們創(chuàng)建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執(zhí)行算法
  • Spring框架的資源訪問Resource接口。該接口提供了更強的資源訪問能力,Spring 框架本身大量使用了 Resource 接口來訪問底層資源。

到了這里,關(guān)于設(shè)計模式_spring框架中常用的8種設(shè)計模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【開源與項目實戰(zhàn):開源實戰(zhàn)】85 | 開源實戰(zhàn)四(中):剖析Spring框架中用來支持擴展的兩種設(shè)計模式

    【開源與項目實戰(zhàn):開源實戰(zhàn)】85 | 開源實戰(zhàn)四(中):剖析Spring框架中用來支持擴展的兩種設(shè)計模式

    上一節(jié)課中,我們學習了 Spring 框架背后蘊藏的一些經(jīng)典設(shè)計思想,比如約定優(yōu)于配置、低侵入松耦合、模塊化輕量級等等。我們可以將這些設(shè)計思想借鑒到其他框架開發(fā)中,在大的設(shè)計層面提高框架的代碼質(zhì)量。這也是我們在專欄中講解這部分內(nèi)容的原因。 除了上一節(jié)課中

    2024年02月11日
    瀏覽(19)
  • 【設(shè)計模式】單例模式|最常用的設(shè)計模式

    【設(shè)計模式】單例模式|最常用的設(shè)計模式

    單例模式是最常用的設(shè)計模式之一,雖然簡單,但是還是有一些小坑點需要注意。本文介紹單例模式并使用go語言實現(xiàn)一遍單例模式。 單例模式保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 使用場景: 當類只能有一個實例而且可以從一個公開的眾所周知的訪

    2024年04月29日
    瀏覽(31)
  • 小白初探架構(gòu)模式—常用的設(shè)計模式

    小白初探架構(gòu)模式—常用的設(shè)計模式

    目錄 1.前言 2. 主從架構(gòu) ? ? ? ? 2.1 主從架構(gòu)的優(yōu)點 ? ? ? ?2.2?主從架構(gòu)的應用場景 ? ? ? ? 2.3?主從架構(gòu)的實現(xiàn) ? ? ? ? 2.4 主從架構(gòu)的示例 3. 主從架構(gòu)設(shè)計的延伸 ????????3.1?主備模式 ????????3.2? 主從復制 ????????3.3 集群分片 ????????3.4 異地多活 4. 總

    2024年01月25日
    瀏覽(25)
  • 什么是設(shè)計模式?常用的設(shè)計有哪些?

    單例模式 工廠模式 代理模式(proxy) 設(shè)計模式是前輩們經(jīng)過無數(shù)次實踐所總結(jié)的一些方法(針對特定問題的特定方法) 這些設(shè)計模式中的方法都是經(jīng)過反復使用過的。 1、單例模式(懶漢式、餓漢式) 步驟: 1、構(gòu)造方法私有化,讓除了自己類能創(chuàng)建,其他類都不能創(chuàng)建。

    2024年02月13日
    瀏覽(26)
  • 前端常用設(shè)計模式

    在上述案例中, UserInfoComponent 負責兩個職責:顯示用戶信息和發(fā)送請求獲取用戶信息。如果我們將發(fā)送請求的邏輯提取到一個單獨的服務或鉤子函數(shù)中,可以更好地遵守單一職責原則。 在上述案例中,主題切換功能違反了開放封閉原則,因為每次添加新的主題都需要修改切

    2024年02月10日
    瀏覽(16)
  • 前端常用設(shè)計模式初探

    設(shè)計模式一直是程序員談論的“高端”話題之一,總有一種敬而遠之的心態(tài)。在了解后才知道在將函數(shù)作為一等對象的語言中,有許多需要利用對象多態(tài)性的設(shè)計模式,比如單例模式、 策略模式等,這些模式的結(jié)構(gòu)與傳統(tǒng)面向?qū)ο笳Z言的結(jié)構(gòu)大相徑庭,實際上已經(jīng)融入到了語

    2024年02月05日
    瀏覽(15)
  • 常用設(shè)計模式

    游戲開發(fā)中常用的設(shè)計模式有很多種,以下是一些常見的設(shè)計模式: 1. 單例模式(Singleton Pattern):用于創(chuàng)建一個全局唯一的對象實例,比如游戲中的資源管理器或者游戲設(shè)置。 2. 工廠模式(Factory Pattern):用于創(chuàng)建對象的過程抽象,可以根據(jù)參數(shù)的不同返回不同類型的對象

    2024年02月09日
    瀏覽(16)
  • 常用的設(shè)計模式

    游戲開發(fā)中常用的設(shè)計模式有很多種,以下是一些常見的設(shè)計模式: 1. 單例模式(Singleton Pattern):用于創(chuàng)建一個全局唯一的對象實例,比如游戲中的資源管理器或者游戲設(shè)置。 2. 工廠模式(Factory Pattern):用于創(chuàng)建對象的過程抽象,可以根據(jù)參數(shù)的不同返回不同類型的對象

    2024年02月09日
    瀏覽(15)
  • 前端常用的設(shè)計模式

    設(shè)計模式:是一種抽象的編程思想,并不局限于某一特定的編程語言,而是在許多語言之間是相通的;它是軟件設(shè)計中常見的問題的通用、可反復使用、多少人知曉的一種解決方案或者模板。一般對與從事過面向?qū)ο缶幊痰娜藖碚f會更熟悉一些。 設(shè)計模式的意義:指導我們?nèi)?/p>

    2024年01月24日
    瀏覽(24)
  • 【常用設(shè)計模式】待補充

    【常用設(shè)計模式】待補充

    Github倉庫地址 23中設(shè)計模型分為常見的三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式 描述 簡單工廠模式不是23中設(shè)計模式中的。簡單工廠模式不直接向客戶端暴露對象創(chuàng)建的細節(jié),而是通過一個工廠類來負責創(chuàng)建產(chǎn)品類的實例 角色 抽象產(chǎn)品角色:給具體產(chǎn)品角色提供接口

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包