精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

松下纱荣子在线观看| 日本黄色片在线播放| 一区二区三区视频网站| 国产米奇在线777精品观看| 久久6免费高清热精品| 国内精品久久99人妻无码| 久久人人视频| 午夜精品福利一区二区三区av| 日韩av图片| 蜜桃91麻豆精品一二三区| 日韩和欧美的一区| 久久久久久久爱| 国产精品av久久久久久无| 一区二区三区国产好| 欧美性感一类影片在线播放| 国产欧美精品aaaaaa片| yw视频在线观看| 亚洲综合国产| 亚洲精品国产精品久久清纯直播| 成人黄色片视频| 亚洲精品天堂| 国产精品午夜电影| 国产精品99久久久久久人| 麻豆明星ai换脸视频| 欧美国产极品| 日韩视频在线观看一区二区| 亚洲免费看av| 欧美电影免费观看高清完整| 亚洲午夜精品网| 国产av第一区| 永久av在线| 国产欧美一区二区三区鸳鸯浴| 国产一区二区中文字幕免费看 | 偷窥国产亚洲免费视频| 亚洲一区二区精品在线观看| 你懂的视频在线免费| 成人天堂资源www在线| 91免费高清视频| 一级黄色片在线| 免费一级片91| 国产精品久久一区| 婷婷激情五月综合| 国产99久久精品一区二区300| 日韩久久精品一区| 91性高潮久久久久久久| 国产精品免费精品自在线观看| 欧美无乱码久久久免费午夜一区 | 天堂亚洲精品| 亚洲三级电影网站| 18视频在线观看娇喘| 日本a在线播放| 自拍偷拍国产精品| 一区二区三区四区| 麻豆视频在线观看免费| 一区视频在线播放| 日韩国产精品毛片| 色呦呦网站在线观看| 依依成人综合视频| 国产乱子伦精品无码专区| 快射av在线播放一区| 中文字幕一区二区三区在线观看| 亚洲人成网站在线观看播放| 午夜激情在线观看| 亚洲天堂免费看| 激情五月六月婷婷| 色综合视频在线| 不卡的看片网站| 国内不卡一区二区三区| 五月婷婷伊人网| 久久综合九色综合97婷婷| 蜜桃av噜噜一区二区三| 激情小视频在线观看| 亚洲国产经典视频| 国产一级大片免费看| 91九色国产在线播放| 黑人巨大精品欧美一区二区三区 | 男人天堂网站在线| 超碰97国产精品人人cao| 精品久久久久久久久国产字幕 | 欧美人妻一区二区| 在线综合亚洲| 国产美女扒开尿口久久久| 国产一区在线免费| 无码一区二区三区在线观看| 日本系列欧美系列| 亚洲综合色av| 男生女生差差差的视频在线观看| 欧美国产日韩精品免费观看| 日本黄xxxxxxxxx100| 欧美gv在线观看| 精品视频免费看| 亚洲国产一二三精品无码| 青草影视电视剧免费播放在线观看| 红桃视频成人在线观看| 欧美特级aaa| 一区二区三区高清在线观看| 亚洲性线免费观看视频成熟| 神马久久精品综合| 老司机亚洲精品| 91传媒免费看| 国产精品久久久久一区二区国产 | 国产91色综合久久免费分享| 免费国产一区| 欧洲中文在线| 欧美视频自拍偷拍| 少妇激情一区二区三区视频| 欧美大片aaaa| 日本三级韩国三级久久| 久久久久久久极品内射| 丝袜美腿一区二区三区| 999国产视频| www.亚洲资源| 欧美日韩国产在线播放| 在线免费黄色网| 黄色不卡一区| 欧亚精品在线观看| 亚洲成人一级片| 欧美国产1区2区| 国产97在线 | 亚洲| 嫩呦国产一区二区三区av| 在线成人小视频| 日韩人妻一区二区三区| 国产精品mm| 久久伊人色综合| 五月婷婷六月婷婷| 91在线一区二区三区| 青青草综合视频| 亚洲国产精选| 最近中文字幕日韩精品| 中文字幕在线欧美| 91在线视频免费观看| 日韩国产成人无码av毛片| 亚洲a成人v| 色噜噜国产精品视频一区二区| 高清乱码免费看污| 972aa.com艺术欧美| 超级碰在线观看| 老司机亚洲精品一区二区| xxxxx成人.com| 亚洲系列第一页| 国产精品国产三级国产| 亚洲欧美日韩一级| 欧美国产小视频| 国产精品激情自拍| 成人性生交大片免费看午夜| 在线国产亚洲欧美| 中文天堂资源在线| 美女网站视频久久| 亚洲精品日韩在线观看| 色综合一区二区日本韩国亚洲 | 精品无码在线观看| 久久亚洲综合| 日韩欧美一区二区三区四区五区| 成人av免费电影网站| 亚洲欧洲高清在线| 亚洲精品一区二区二区| 国产精品嫩草影院com| 超碰成人在线播放| 综合国产精品| 国产欧美日韩伦理| 欧美片第1页| 中文字幕在线看视频国产欧美在线看完整 | 麻豆成人91精品二区三区| 国产精品成人av性教育| av在线1区2区| 欧美精品日韩一本| 亚洲一级理论片| 国内精品视频一区二区三区八戒| 先锋影音男人资源| 视频一区日韩| 91av在线网站| 成年人在线视频免费观看| 欧美日韩国产精品成人| 五月天婷婷色综合| 久久青草久久| 亚洲视频导航| 中文字幕一区二区三区中文字幕| 久久久亚洲影院| 男人天堂亚洲二区| 欧美一区二区三区影视| 国产精品第108页| 国产欧美日韩综合| 少妇性l交大片7724com| 亚洲欧美高清| 国产又爽又黄ai换脸| 国产精品美女在线观看直播| 国产a∨精品一区二区三区不卡| 日韩大片在线永久免费观看网站| 日韩写真欧美这视频| 亚洲GV成人无码久久精品| 国产精品久久久久久妇女6080| youjizz.com国产| 日韩不卡一区二区| www.国产在线播放| 日韩成人视屏| 日本成人在线视频网址| 直接在线观看的三级网址| 日韩大片免费观看视频播放| 中文字幕永久在线观看| 婷婷成人综合网| 九九热视频在线免费观看| 91在线视频在线| av在线免费观看不卡| 日本中文一区二区三区| 男人添女人荫蒂免费视频| 欧洲乱码伦视频免费| 国产精品初高中精品久久| 国产资源一区| 奇米成人av国产一区二区三区| av网站在线免费看推荐| 一个人www欧美| 国语对白永久免费| 久久久国产一区二区三区四区小说 | 久久高清视频免费| 少妇人妻一区二区| 欧美一区二区免费| 中文字幕一二三四| 欧美日韩在线视频首页| 欧美日韩三级在线观看 | 欧美一级大片免费看| 日韩av一二三| 91黄色小网站| 亚洲精品九九| 国产欧美久久久久| 亚洲视频在线免费| 一区二区三区三区在线| 成人婷婷网色偷偷亚洲男人的天堂| 精品一区二区三区国产| av成人男女| 97超碰人人模人人爽人人看| 成人污版视频| 91在线播放国产| 亚洲一区av| 91在线看www| 国产精品日本一区二区三区在线| 国产精品青草久久久久福利99| 卡通欧美亚洲| 日韩av色在线| 成人开心激情| 国产精品成人在线| 户外露出一区二区三区| 国产成人精品综合久久久| 中文字幕不卡三区视频| 欧美有码在线观看视频| 这里有精品可以观看| 97婷婷大伊香蕉精品视频| av成人 com a| 2019亚洲日韩新视频| 欧美激情20| 欧美在线一区二区视频| 夜鲁夜鲁夜鲁视频在线播放| 茄子视频成人在线| 免费亚洲电影| 国产精品网站大全| 色综合一区二区日本韩国亚洲| 成人激情视频在线观看| 日本一区二区三区电影免费观看| 91精品啪在线观看麻豆免费| 欧美日韩黄网站| 国产精品10p综合二区| 欧美1区2区3区4区| 欧美亚洲国产免费| 欧美mv日韩| 久久久久久久久久伊人| 亚洲精品护士| 91淫黄看大片| 国产主播一区二区三区| 亚洲欧美综合视频| 日精品一区二区三区| 性欧美1819| 国产成人av一区| 亚洲国产欧美视频| 国产精品不卡在线| 国产亚洲精品码| 91黄色在线观看| av资源免费看| 亚洲欧美日韩精品久久亚洲区 | 影音先锋日韩有码| 黄色av免费在线| 午夜精品久久久久久99热软件| 自拍视频在线看| 国产中文字幕日韩| 久久这里只有精品一区二区| 神马欧美一区二区| 欧美精品97| 欧美日韩一区二区在线免费观看| 女同性一区二区三区人了人一 | 国产极品在线观看| 免费91麻豆精品国产自产在线观看| 成人福利影视| 国产精品美女主播在线观看纯欲| 日韩成人在线观看视频| 秋霞久久久久久一区二区| 欧美激情成人在线| 国产情侣av自拍| 成人妖精视频yjsp地址| 国产调教在线观看| 亚洲成人第一页| 国产精品九九九九| 亚洲欧美激情另类校园| 在线网址91| 国产精品一二区| 亚洲涩涩av| 黄色三级中文字幕| 久久99久久精品| 亚洲做受高潮无遮挡| 亚洲午夜av在线| 国产精选久久久| 在线观看视频亚洲| 欧美gv在线| 成人欧美一区二区| 91精品国产福利在线观看麻豆| 亚洲欧美日韩在线综合| 亚洲精选久久| 可以看的av网址| 国产精品免费丝袜| 国产美女www| 亚洲欧洲激情在线| 国产伦理精品| 超碰97人人在线| 欧美在线精品一区| 日韩不卡一二三| 国产午夜精品美女毛片视频| 日韩伦人妻无码| 精品久久人人做人人爰| av免费在线观看网址| 国产精品自产拍在线观看中文| 亚洲精品小区久久久久久| 亚洲国产精品无码观看久久| 国产麻豆视频精品| 来吧亚洲综合网| 欧美日韩www| 777电影在线观看| 国产精品久久久精品| 国产99久久精品一区二区300| 成人免费观看毛片| 久久新电视剧免费观看| 日韩欧美成人一区二区三区| 亚洲精品97久久| 涩涩视频网站在线观看| 国产欧美一区二区三区另类精品 | 又色又爽又黄视频| 中日韩av电影| 91精品国产综合久| 久久亚洲私人国产精品va| 欧洲亚洲精品| 加勒比海盗1在线观看免费国语版| 国产精品一区二区三区四区| jizz亚洲少妇| 日韩亚洲欧美一区| 蜜桃传媒在线观看免费进入| 成人欧美一区二区三区视频xxx| 欧美特黄一区| 中文字幕乱码一区| 色综合久久天天| 在线观看av黄网站永久| 国产日本欧美在线观看| 亚洲女同一区| 日批免费观看视频| 精品magnet| 国产主播福利在线| 国产欧美日韩精品专区| 欧美1区免费| 好男人香蕉影院| 色综合咪咪久久| av中文字幕在线| 亚洲xxx自由成熟| 亚洲国产激情| 级毛片内射视频| 91精品在线免费| free性欧美16hd| 欧美日韩在线观看一区二区三区| 麻豆91精品视频| 精品爆乳一区二区三区无码av| 亚洲激情自拍图| 丁香婷婷久久| 国产真实老熟女无套内射| 久久久久九九视频| 国产精品主播一区二区| 国产69精品久久久久久| 成人a'v在线播放| caopor在线| 欧美中文字幕久久| 毛片在线导航| 日韩免费三级| 国产在线国偷精品免费看| 欧美精品一区二区蜜桃| 亚洲欧洲日产国产网站| 免费一区二区三区在线视频| 男人的天堂99| 亚洲黄色免费网站| 黄色电影免费在线看| av蓝导航精品导航| 日韩专区一卡二卡| 日本熟妇毛茸茸丰满| 日韩视频中文字幕| 婷婷精品在线观看| 久久发布国产伦子伦精品| 91福利国产精品| av中文字幕在线看|