Spring5學習隨筆-Spring5的第一個程式(環境搭建、日誌框架整合)

来源:https://www.cnblogs.com/eyewink/archive/2023/11/14/17831102.html
-Advertisement-
Play Games

學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第二章、第一個Spring程式 1.軟體版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5. ...


學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】

第二章、第一個Spring程式

1.軟體版本

1.JDK1.8+
2.Maven3.5+
3.IDEA2018+
4.SpringFramework 5.1.4
官網:www.spring.io

2.環境搭建

  • Spring的jar包

    1.設置pom的依賴

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.1.4.RELEASE</version>
            </dependency>
    
  • Spring的配置文件

    1.配置文件的放置位置:任意位置 沒有硬性要求

    2.配置文件的命名:沒有硬性要求 建議 applicationContext.xml

    思考:日後應用Spring框架時,需要進行配置文件路徑的位置。

3.Spring的核心API

  • ApplicationContext

    作用:Spring提供的ApplicationContext這個工廠,用於對象的創建

    好處:解耦合

    • ApplicationContext介面類型

      介面:屏蔽實現的差異

      非web環境:ClassPathXmlApplicationContext(例如:main junit)

      web環境:XmlWebApplicationContext

    可以看到ApplicationContext就是一個介面

    • 重量級資源(對象占用記憶體多就是重量級資源。)

      1.ApplicationContext工廠的對象占用大量記憶體(指的是下麵的實現類)

      2.不會頻繁的創建對象:一個應用程式只會創建一個工廠對象

      3.ApplicationContext工廠:一定是線程安全的(多線程併發訪問)

4.程式開發

spring開發的4個步驟

1.創建類型

2.配置文件的配置 applicationContext.xml

<bean id="person" class="com.baizhi.basic.Person"/>

3.通過工廠類 獲得對象

ApplicationContext | ClassPathXmlApplicationContext

//1.獲取Spring的工廠
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
//2 通過工廠類獲取對象
Person person = (Person) context.getBean("person");

5.細節分析

  • 名詞解釋

    Spring工廠創建的對象叫做bean

  • Spring工廠的相關方法

    Person person = context.getBean("person", Person.class);
            System.out.println("person = " + person);
    
            當前Spring的配置文件中只能有一個<bean class是Person類型
            Person person = context.getBean(Person.class);
            System.out.println("person = " + person);
    
            獲取的是 Spring工廠配置文件中所有bean標簽的id值 person person1...
            String[] beanDefinitionNames = context.getBeanDefinitionNames();
            for (String beanDefinitionName : beanDefinitionNames) {
                System.out.println(beanDefinitionName);
            }
    
            //根據類型獲取Spring配置文件中對應的id值
            String[] beanNamesForType = context.getBeanNamesForType(Person.class);
            for (String s : beanNamesForType) {
                System.out.println(s);
            }
           //用於判斷是否存在指定id值的bean
            System.out.println(context.containsBeanDefinition("person"));
    
            //用於判斷是否存在指定id值的bean
            System.out.println(context.containsBean("person"));
    
  • 配置文件

    1.只配置class屬性

    上述這種配置 有預設id值:com.baizhi.basic.Person#0

    應用場景:如果這個bean只需要使用一次,那麼就可以省略id

               如果這個bean使用多次,則需要設置id值
    

    2.name屬性

    作用:用於在Spring的配置文件中,為bean對象定義別名

    相同:

    context.getBean("name|id");

    區別:

    1.別名可以定義多個,但是id屬性只能有一個值

    2.XML的id屬性的值,命名要求:必須以字母開頭,字母 數字 下劃線 連字元 不能以特殊字元開頭

    name屬性的值,命名沒有要求 命名靈活

    XML發展到了今天:id屬性的限制不存在了

    3.代碼

    //用於判斷是否存在指定id值的bean,不能判斷name值
          System.out.println(context.containsBeanDefinition("p"));
    
    //用於判斷是否存在指定id值以及name值的bean
           System.out.println(context.containsBean("p"));
    

6.Spring工廠的底層實現原理(簡易版)

“Spring工廠是可以調用對象私有的構造方法創建對象” 這就是比 new 創建對象 強大的地方

Spring的運行原理/機制

7.思考

問題:未來在開發過程中,是不是所有的對象,都會交給Spring工廠來創建呢?

回答:理論上 是的,但是有特例:實體對象(entity)是不會交給Spring創建的,它是由持久層框架進行創建,因為它需要數據,數據來源於資料庫,而Spring沒有數據。

第三章、5.x與日誌框架的整合

Spring與日誌框架進行整合,日誌框架就可以在控制臺中,輸出Spring框架運行過程中的一些重要的信息

好處:便於瞭解Spring框架的運行過程,有利於程式的調試

  • Spring如何整合日誌框架

    預設

    Spring1,2,3早期都是於commons-logging.jar 整合的日誌框架

    Spring5.x預設整合的日誌框架 logback log4j2

    Spring5.x整合log4j

    1.引入log4j jar包

    2.引入log4.properties配置文件

    • pom

      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.25</version>
      </dependency>
      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
      </dependency>
      
    • log4j.properties

      # resources文件夾根目錄下
      ## 配置根
      log4j.rootLogger = debug,console
      ### 日誌輸出到控制台顯示
      log4j.appender.console=org.apache.log4j.ConsoleAppender
      log4j.appender.console.Target=System.out
      log4j.appender.console.layout=org.apache.log4j.PatternLayout
      log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss) %-5p %c{1}:%L - %m%n
      

作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 接上文《Python學習 —— 初步認知》,有需要請自取:Python學習 —— 初步認知 在這篇文章中,我們一起深入瞭解Python中常用的內置數據類型。Python是一種功能強大的編程語言,它提供了多種內置數據類型,用於存儲和操作數據。這些數據類型包括數字、字元串、序列和映射等。熟練掌 ...
  • 賦值表達式(assignment expression)是Python 3.8新引入的語法,它會用到海象操作符(walrus operator)。 這種寫法可以解決某些持續已久的代碼重覆問題。a = b是一條普通的賦值語句,讀作a equals b,而a := b則是賦值表達式,讀作a walrus ...
  • 1.首先是準備施法材料 JDK的下載地址:https://www.oracle.com/java/technologies/downloads/ 然後選擇自己的想要的版本和英雄(系統) 選擇x64 Compressed Archive免安裝版本進行下載(解壓就用,免除瘋狂確認的煩惱) 解壓到某個位置 ...
  • 來源:blog.csdn.net/qq_44384533/article/details/112324224 之前紅包權益領取查詢的介面超時了,因為有用戶訂購的權益有點多 解決方案 用線程池+ FutureTask將1個查詢拆分成多個小查詢 選擇FutureTask是因為它具有僅執行1次run()方 ...
  • NullPointerException(空指針異常):當試圖調用實例方法或訪問實例變數時,對象引用為 null 時拋出。ArithmeticException(算術異常):當試圖做出違反算術規則的操作時拋出,比如除以零。ClassCastException(類轉換異常):當試圖將對象強制轉換為不是... ...
  • 從JDK11到JDK17,到底帶來了哪些特性呢?亞毫秒級的ZGC效果到底怎麼樣呢?值得我們升級嗎?而且升級過程會遇到哪些問題呢?帶著這些問題,本篇文章將帶來完整的JDK11升級JDK17最全實踐。 ...
  • 0 前言 潛心打造國內一流,國際領先的技術乾貨。 文章收錄在我的 GitHub 倉庫,歡迎Star/fork: JavaEdge-Interview 受網路和運行環境影響,應用程式可能遇到暫時性故障,如瞬時網路抖動、服務暫時不可用、服務繁忙導致超時等。 自動重試機制可大幅避免此類故障,保障操作成功執 ...
  • 來源:blog.csdn.net/weixin_42653522/article/details/117151913 1、前言 ApplicationContext 中的事件處理是通過 ApplicationEvent 類和 ApplicationListener 介面提供的。如果將實現了 Appl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...