精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊Spring中最常用的十種設計模式

開發 前端
作為一名有多年開發經驗的老司機,每次翻看Spring源碼都讓我感嘆:"這哪是框架,分明是設計模式的百科全書!"有些小伙伴在工作中可能只會用@Autowired,卻不知背后藏著多少精妙設計。今天這篇文章跟大家一起聊聊Spring中最常用的10種設計模式,希望對你會有所幫助。

前言

作為一名有多年開發經驗的老司機,每次翻看Spring源碼都讓我感嘆:"這哪是框架,分明是設計模式的百科全書!"

有些小伙伴在工作中可能只會用@Autowired,卻不知背后藏著多少精妙設計。

今天這篇文章跟大家一起聊聊Spring中最常用的10種設計模式,希望對你會有所幫助。

1.模板方法模式:流程骨架大師

場景:處理重復流程但允許細節變化Spring應用JdbcTemplateRestTemplate

// 偽代碼展示模板方法核心
publicabstractclass JdbcTemplate {
    // 定義算法骨架(不可重寫)
    public final Object execute(String sql) {
        Connection conn = getConnection(); // 抽象方法
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        Object result = mapResult(rs);     // 抽象方法
        releaseResources(conn, stmt, rs);
        return result;
    }
    
    // 留給子類實現的鉤子方法
    protected abstract Connection getConnection();
    protected abstract Object mapResult(ResultSet rs);
}

為什么用

  • 復用資源管理(連接獲取/釋放)等通用邏輯
  • 允許子類只關注業務差異(如結果映射)思考:當你寫重復流程時,想想能否抽出模板骨架

2.工廠模式:對象出生管理局

場景:解耦對象創建與使用Spring應用BeanFactory核心接口

public interface BeanFactory {
    Object getBean(String name);
    <T> T getBean(Class<T> requiredType);
}

// 實現類:DefaultListableBeanFactory
public class UserService {
    // 使用者無需關心Bean如何創建
    @Autowired 
    private OrderService orderService; 
}

設計精髓

  • 隱藏復雜的對象初始化過程(如循環依賴處理)
  • 統一管理對象生命周期(單例/原型等作用域)類比:就像點外賣不需要知道廚師怎么做菜

3.代理模式:隱形護衛

場景:無侵入增強對象功能

Spring應用:AOP動態代理

// JDK動態代理示例
publicclass LogProxy implements InvocationHandler {
    private Object target;
    
    public Object createProxy(Object target) {
        this.target = target;
        return Proxy.newProxyInstance(
            target.getClass().getClassLoader(),
            target.getClass().getInterfaces(),
            this);
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) {
        System.out.println("【日志】調用方法: " + method.getName());
        return method.invoke(target, args); // 執行原方法
    }
}

// Spring中通過@Aspect實現類似功能
@Aspect
@Component
publicclass LogAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logMethodCall(JoinPoint jp) {
        System.out.println("調用方法: " + jp.getSignature().getName());
    }
}

動態代理兩板斧

  • JDK代理:基于接口(要求目標類實現接口)
  • CGLIB代理:基于繼承(可代理普通類)價值:業務邏輯與橫切關注點(日志/事務等)徹底解耦

4.單例模式:全局唯一指揮官

場景:減少資源消耗,保證全局一致性

Spring實現:Bean默認作用域

// 源碼片段:AbstractBeanFactory
public Object getBean(String name) {
    Object bean = getSingleton(name); // 先查緩存
    if (bean == null) {
        bean = createBean(name);      // 不存在則創建
        addSingleton(name, bean);     // 放入緩存
    }
    return bean;
}

關鍵設計

  • 三級緩存解決循環依賴(singletonObjects, earlySingletonObjects, singletonFactories)
  • 并發安全通過synchronized+雙重檢查鎖定實現警示:切忌在單例Bean中保存狀態變量!

5.觀察者模式:事件廣播網

場景:解耦事件生產者和消費者

Spring應用ApplicationEvent機制

// 1. 定義事件
publicclass OrderCreatedEvent extends ApplicationEvent {
    public OrderCreatedEvent(Order source) {
        super(source);
    }
}

// 2. 發布事件
@Service
publicclass OrderService {
    @Autowired ApplicationEventPublisher publisher;
    
    public void createOrder(Order order) {
        // 業務邏輯...
        publisher.publishEvent(new OrderCreatedEvent(order));
    }
}

// 3. 監聽事件
@Component
publicclass EmailListener {
    @EventListener
    public void handleOrderEvent(OrderCreatedEvent event) {
        // 發送郵件通知
    }
}

優勢

  • 事件源與監聽器完全解耦
  • 支持異步處理(加@Async注解即可)

6.策略模式:算法切換器

場景:動態選擇算法實現

Spring應用Resource資源加載

// 資源加載策略族
Resource res1 = new ClassPathResource("config.xml"); // 類路徑策略
Resource res2 = new UrlResource("http://config.com");// 網絡策略
Resource res3 = new FileSystemResource("/opt/config");// 文件系統策略

// 統一調用接口
InputStream is = res1.getInputStream();

源碼設計亮點

  • Resource接口統一抽象
  • 通過ResourceLoader自動選擇策略應用場景:支付方式切換(微信/支付寶/銀聯)

7.適配器模式:接口轉換器

場景:兼容不兼容的接口

Spring應用:Spring MVC的HandlerAdapter

// 偽代碼:處理多種Controller
publicclass RequestMappingHandlerAdapter implements HandlerAdapter {
    
    public boolean supports(Object handler) {
        return handler instanceof Controller;
    }
    
    public ModelAndView handle(HttpRequest req, HttpResponse res, Object handler) {
        Controller controller = (Controller) handler;
        return controller.handleRequest(req, res); // 統一適配調用
    }
}

// 實際Spring源碼中處理了:
// 1. @Controller注解類 2. HttpRequestHandler 3. Servlet實現等

價值

  • 讓DispatcherServlet無需關心Controller具體類型
  • 新增Controller類型只需擴展適配器

8.裝飾器模式:功能增強包

場景:動態添加功能

Spring應用HttpServletRequest包裝

// 典型應用:緩存請求體
ContentCachingRequestWrapper wrappedRequest = 
    new ContentCachingRequestWrapper(rawRequest);

// 可在filter中多次讀取body
byte[] body = wrappedRequest.getContentAsByteArray();

源碼實現

public class ContentCachingRequestWrapper extends HttpServletRequestWrapper {
    private ByteArrayOutputStream cachedContent;
    
    @Override
    public ServletInputStream getInputStream() {
        // 裝飾原方法:緩存流數據
    }
}

設計本質:通過包裝器在不修改原對象基礎上增強功能

9.建造者模式:復雜對象組裝工

場景:分步構建復雜對象

Spring應用BeanDefinitionBuilder

// 構建復雜的Bean定義
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(UserService.class);
builder.addPropertyValue("maxRetry", 3);
builder.setInitMethodName("init");
builder.setScope(BeanDefinition.SCOPE_SINGLETON);

// 注冊到容器
registry.registerBeanDefinition("userService", builder.getBeanDefinition());

對比傳統構造

  • 解決多參數構造的混亂(尤其可選參數多時)
  • 構建過程更加清晰可讀

10 責任鏈模式:攔截器的骨架設計

場景:解耦多步驟處理流程

Spring應用HandlerInterceptor攔截器鏈

// Spring MVC核心執行鏈
publicclass HandlerExecutionChain {
    privatefinal List<HandlerInterceptor> interceptors = new ArrayList<>();
    
    // 執行前置處理(責任鏈核心)
    public boolean applyPreHandle(HttpServletRequest request, 
                                 HttpServletResponse response) {
        for (int i = 0; i < interceptors.size(); i++) {
            HandlerInterceptor interceptor = interceptors.get(i);
            // 任意攔截器返回false則中斷鏈條
            if (!interceptor.preHandle(request, response, this.handler)) {
                triggerAfterCompletion(request, response, i); // 清理已完成
                returnfalse;
            }
        }
        returntrue;
    }
}

實戰配置

@Configuration
publicclass WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 構建責任鏈
        registry.addInterceptor(new LogInterceptor()).order(1);
        registry.addInterceptor(new AuthInterceptor()).order(2);
        registry.addInterceptor(new RateLimitInterceptor()).order(3);
    }
}

// 獨立攔截器實現
publicclass AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        if (!checkToken(req.getHeader("Authorization"))) {
            res.sendError(401); // 認證失敗
            returnfalse; // 中斷鏈
        }
        returntrue; // 放行
    }
}

設計價值

  • 開閉原則:新增攔截器無需修改現有代碼
  • 單一職責:每個攔截器只關注單一功能
  • 動態編排:通過order()靈活調整執行順序
  • 流程控制:任意節點可中斷或繼續傳遞


典型反模式:在攔截器中注入其他攔截器,這將破壞責任鏈獨立性,導致循環依賴!

總結

  • 解耦的藝術工廠模式解耦創建/使用,觀察者模式解耦事件/處理
  • 擴展性的智慧策略模式支持算法擴展,裝飾器模式支持功能擴展
  • 復雜性的封裝模板方法封裝流程,建造者模式封裝構建
  • 性能的權衡單例模式減少資源消耗,代理模式按需增強

最后送給小伙伴們的建議:不要為了用模式而用模式

就像Spring的作者Rod Johnson說的:"優雅的代碼不是模式的堆砌,而是恰到好處的抽象。"

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2025-04-25 07:10:00

GenAIAI工具人工智能

2024-12-11 08:20:57

設計模式源碼

2020-08-16 20:36:21

滲透測試漏洞網絡攻擊

2023-05-15 15:29:13

設計模式JavaScript

2024-10-14 08:39:29

工廠模式策略模式代碼

2024-09-03 10:40:38

2016-10-21 19:44:08

數據科學家算法

2024-01-24 13:14:00

Python內置函數工具

2025-11-10 02:11:00

2023-07-19 11:19:37

AI項目人工智能

2025-02-10 08:30:00

JavaScrip開發設計模式

2024-01-22 08:15:42

API協議設計

2022-08-26 16:21:47

數據分析工具運營

2024-01-22 13:53:00

Linux環境變量

2022-01-09 18:32:03

MySQL SQL 語句數據庫

2022-06-16 11:01:22

數據庫SQL

2024-11-08 13:34:24

2025-11-18 08:22:56

2024-02-28 18:01:20

IDEAIDEtry

2021-09-16 11:02:49

Python線程
點贊
收藏

51CTO技術棧公眾號

99热这里只有精品在线播放| 欧美一区二区视频| 亚洲精品国产suv一区| 西野翔中文久久精品国产| 日韩av不卡在线观看| 日韩视频免费观看高清完整版| 国产成人欧美在线观看| 国产又黄又嫩又滑又白| 永久免费在线观看视频| 亚欧成人精品| 亚洲大胆美女视频| 欧美日韩视频免费| 国产精品伦理一区| 日韩欧美高清在线播放| 一本到三区不卡视频| 国产精品精品软件视频| 日韩va亚洲va欧美va清高| 樱花草涩涩www在线播放| 成人av在线观| 国内免费精品永久在线视频| 国产精品久久久久野外| sis001欧美| 26uuu久久综合| 欧美极品美女视频网站在线观看免费| 国产精品二区视频| 久久久成人av毛片免费观看| 欧美激情一区二区| 国产精品美女www| 在线免费看视频| 久草在线资源福利站| 91在线小视频| 国产视频一区在线播放| 中文天堂在线一区| 国产精品xxx视频| 亚洲国产精品成人综合久久久| 久久大胆人体| 成人免费毛片高清视频| 久久久久久久国产精品| jizzjizzjizz国产| 精品日产免费二区日产免费二区| 欧美午夜精品久久久久久久| 日韩高清av电影| 在线观看色网站| 亚洲精品va| 精品三级在线观看| 五十路熟女丰满大屁股| 国产在线高清| 青青草原综合久久大伊人精品优势| 国精产品一区一区三区有限在线| 色欲一区二区三区精品a片| 91成人精品在线| 天天综合网天天综合色| 日韩欧美亚洲日产国产| 天天色棕合合合合合合合| 老司机一区二区三区| 色婷婷久久av| 任你躁av一区二区三区| videos性欧美另类高清| 欧美日韩国产丝袜另类| 亚洲蜜桃在线| 欧洲精品久久一区二区| 日韩激情视频网站| 免费不卡在线观看av| 国产麻豆xxxvideo实拍| 久久99国产精品二区高清软件| 一区二区三区在线免费观看| 欧美综合激情| 亚洲第一天堂影院| 成人网页在线观看| 久久av一区二区三区漫画| 亚洲综合免费视频| 久久精品久久久精品美女| 97精品国产97久久久久久春色| 欧美激情 一区| 国产精品白丝一区二区三区 | 91嫩草丨国产丨精品| 外国成人免费视频| 亚洲精品按摩视频| 午夜精品免费看| 自拍网站在线观看| 黑人巨大精品欧美一区免费视频| 国产制服91一区二区三区制服| 嫩草在线播放| 丁香婷婷综合激情五月色| www.一区二区三区| 中文字幕在线2019| 香蕉精品999视频一区二区 | 国产日韩在线观看视频| 色噜噜狠狠色综合欧洲selulu| 轻点好疼好大好爽视频| 2018av在线| 亚洲欧美偷拍另类a∨色屁股| 欧美一区二区视频在线| 91福利在线视频| 久久精品视频免费观看| 古典武侠综合av第一页| 国产精品免费无遮挡| 国产精品2024| 91亚洲va在线va天堂va国| 少妇又紧又色又爽又刺激视频| 国产精品久久国产愉拍| 欧美激情亚洲自拍| 国产视频1区2区| 午夜亚洲影视| 亚洲xxxxx性| 国产美女免费看| 久久99久久精品欧美| 国产精品久久久久久超碰| 国产人妖一区二区| 久久在线观看免费| 欧美日韩高清在线一区| 日本一区高清| 亚洲欧美日韩国产综合| 懂色av粉嫩av蜜臀av| 午夜伦全在线观看| 亚洲国产毛片aaaaa无费看| 91传媒免费视频| 日韩制服一区| 亚洲国产中文字幕在线观看| 国精产品视频一二二区| 亚洲欧美日韩国产一区| 国产厕所精品在线观看| 欧美r级在线| 亚洲人成人一区二区在线观看| 久久精品视频16| 日韩亚洲精品在线观看| 亚洲成人动漫在线播放| 午夜三级在线观看| 欧美一区二区| 欧美激情按摩在线| 日韩av综合在线| 亚洲欧美视频一区二区三区| 99久久99久久| caoporn免费在线| 亚洲一区在线观看免费观看电影高清 | 亚洲精品国产精品国自产网站按摩 | 国产精品香蕉av| 又色又爽又黄无遮挡的免费视频| 99精品在线免费| 18黄暴禁片在线观看| 两个人看的在线视频www| 日韩一区二区三区在线| 欧美风情第一页| 国产在线不卡一区| 国产区一区二区| 国产美女性感在线观看懂色av | 精品一区二区三区日韩| 亚洲第一在线综合在线| 粉嫩一区二区三区| 在线电影国产精品| 少妇精品无码一区二区三区| 国内黄色精品| 久久91亚洲精品中文字幕奶水| 国产精品视频久久久久久久| 麻豆久久久久久久| 亚洲图色在线| 国模私拍一区二区国模曼安| 欧美三区免费完整视频在线观看| 亚洲av午夜精品一区二区三区| 免费电影一区二区三区| 欧美精品在线免费| 99在线观看免费| 国产日产欧美精品一区二区三区| 日韩激情免费视频| 国产精品2区| 欧美区二区三区| 蜜桃视频污在线观看| 亚洲成人一区二区| 欧美亚一区二区三区| 欧美在线精品一区| 动漫一区二区在线| 少妇视频在线观看| 亚洲系列中文字幕| 日本少妇性高潮| 91麻豆蜜桃一区二区三区| 亚洲人成无码www久久久| 五月亚洲婷婷| 久久久在线视频| 欧美18xxxxx| 欧美日韩性生活| 美国黄色小视频| 日av在线不卡| 欧美与动交zoz0z| 另类尿喷潮videofree| 日韩中文字在线| 五月天激情四射| 国产精品乱人伦一区二区| 日韩视频第二页| 动漫av一区| 日韩av快播网址| 亚洲av成人精品毛片| 一区二区三区 在线观看视频| 亚洲三级视频网站| 精品国产91| 51成人做爰www免费看网站| 日韩av中文| 亚洲国产成人爱av在线播放| 一区二区乱子伦在线播放| 一个色综合网站| 欧美成人另类视频| 99这里都是精品| 国产欧美日韩网站| 99亚洲乱人伦aⅴ精品| 久久伊人精品天天| 国产视频在线观看免费| 欧美日韩国产精品一区二区三区四区| jizzjizz日本少妇| 99视频精品免费视频| 91香蕉视频免费看| 伊人久久大香线蕉综合四虎小说 | 国产精品天干天干在线综合| 中国黄色片视频| 黑人一区二区三区四区五区| 成人国产1314www色视频| 韩国女主播一区二区| 午夜精品久久久久久久99黑人| 免费黄色在线看| 日韩精品在线免费观看| 日日骚av一区二区| 亚洲已满18点击进入久久| xxxxx99| 久久久久国产免费免费| 黄色激情在线观看| 国产伦精品一区二区三区免费迷| 国产经典久久久| 亚洲成人五区| 91精品久久久久久久久久久| 伊人精品影院| 亚洲国产精品久久久| 国产免费一区二区三区免费视频| 色又黄又爽网站www久久| 日本免费观看视| 久久久久久久久免费| 国产人妖在线观看| 国产精品一级在线| 男生操女生视频在线观看| 亚洲国产日韩欧美在线| 亚洲欧美日韩不卡一区二区三区| 国产91精品对白在线播放| 好吊色欧美一区二区三区四区 | 欧美日韩精品免费观看视频完整| 国产厕所精品在线观看| 日本一区精品视频| 亚洲bt欧美bt日本bt| 成人在线视频区| 亚洲一区二区三区四区视频| 白嫩亚洲一区二区三区| 欧美精品国产精品日韩精品| 性爱视频在线播放| 国产婷婷色综合av蜜臀av| 天堂网在线播放| 日韩高清人体午夜| 一本一道人人妻人人妻αv| 欧美三级韩国三级日本三斤| 一级特黄aa大片| 欧美日韩国产精品一区二区三区四区| www.国产成人| 精品久久久久久电影| www亚洲视频| 亚洲精品乱码久久久久久黑人| 国产黄色小视频网站| 一区二区成人在线观看| 国产性xxxx高清| 一本色道久久综合狠狠躁的推荐| 精品无码一区二区三区的天堂| 亚洲乱码国产乱码精品精的特点| 一区二区国产精品精华液| 亚洲黄色片在线观看| 久久精品国产亚洲AV无码男同 | 亚洲一区三区在线观看| 日韩综合在线| 国产成人生活片| a91a精品视频在线观看| 男女爱爱视频网站| 韩日精品视频| 免费在线激情视频| 麻豆91精品视频| 亚洲精品乱码久久久久久9色| 99久久免费视频.com| 精品国产成人亚洲午夜福利| 成人中文字幕合集| 亚洲天堂网一区二区| 国产精品免费视频网站| 黄色一级片在线| 国产精品色婷婷| 九九九在线视频| 色婷婷综合久久久中文字幕| 国产尤物视频在线观看| 亚洲国产精品网站| 成人影视在线播放| 亚洲免费视频在线观看| 手机看片福利永久| 一色桃子一区二区| 国产在线观看免费网站| 久久亚洲精品一区二区| 在线观看爽视频| 亚洲专区在线视频| 久久av导航| 成人国产一区二区三区| 视频一区二区中文字幕| 国产精品欧美激情在线观看| 激情偷乱视频一区二区三区| 久久久精品高清| 99在线精品视频| 小泽玛利亚一区二区免费| 色94色欧美sute亚洲线路二| 精品欧美一区二区精品少妇| 日韩欧美色综合网站| 国产农村妇女毛片精品久久| 日韩av影院在线观看| 美女国产在线| 国产精品aaa| 六月丁香久久丫| 日本xxx免费| 美女视频黄a大片欧美| 伊人网在线综合| 91视频www| 国产网站在线看| 日韩一区二区视频在线观看| 99riav在线| 国产成人a亚洲精品| 嫩草国产精品入口| 欧美亚洲爱爱另类综合| 国内精品美女在线观看| 日韩va在线观看| 中文在线资源观看网站视频免费不卡| 五月天婷婷网站| 精品久久一区二区三区| 尤物在线网址| 91中文字幕一区| 国产精品88久久久久久| 99热手机在线| ww亚洲ww在线观看国产| 午夜精品久久久久久久久久久久久蜜桃 | 国产精品久久久久7777按摩| 美国精品一区二区| 色婷婷一区二区三区四区| 天天操天天舔天天干| 高清一区二区三区日本久| 日本99精品| 91精品国产吴梦梦| 国产精品正在播放| 性色av无码久久一区二区三区| 91精品国产综合久久久久久久久久 | 999精品网站| 久久夜色精品国产噜噜av| 国产超碰人人爽人人做人人爱| 亚洲国内精品在线| 欧美巨大丰满猛性社交| 久久这里精品国产99丫e6| 成人看的视频| 男人天堂av片| 国产v综合v亚洲欧| 色一情一交一乱一区二区三区| 欧美日韩在线一区| 欧美另类自拍| 国产精品久久久久久影视| 日韩国产欧美| 99日在线视频| 亚洲精品v日韩精品| 丰满人妻一区二区三区四区53| 亚洲欧美综合另类中字| 国产精品扒开做爽爽爽的视频| 国模吧一区二区| 蜜桃久久久久| 亚洲中文字幕无码不卡电影| 国产色一区二区| 一炮成瘾1v1高h| 欧美激情第99页| 亚洲国产精品嫩草影院久久av| 玖玖精品在线视频| 国产不卡在线播放| 九九热精品视频在线| 中文字幕日韩视频| 亚洲精华液一区二区三区| 丝袜美腿玉足3d专区一区| 亚洲乱码久久| 国产精品91av| 欧美性猛交xxxx黑人| 日本在线免费看| 成人蜜桃视频| 日韩黄色小视频| 青娱乐av在线| 一本大道久久加勒比香蕉| 精品欧美视频| 国产大尺度在线观看| 日本免费在线视频不卡一不卡二| 亚洲精品卡一卡二| 日韩av网站在线| 2020国产精品小视频| 免费成人在线视频网站| 成人美女在线观看| 精品国产青草久久久久96| 欧美精品久久久久a| 欧洲杯什么时候开赛| 美国黄色一级视频| 欧美色涩在线第一页| 9999精品成人免费毛片在线看| 伊人久久99| 久久97超碰色|