主頁 > 後端開發 > 什么是 Spring?為什么學它?

什么是 Spring?為什么學它?

2023-05-24 07:57:03 後端開發

前言

歡迎來到本篇文章!在這里,我將帶領大家快速學習 Spring 的基本概念,并解答兩個關鍵問題:什么是 Spring,以及為什么學習 Spring,

廢話少說,下面,我們開始吧!

Spring 官方檔案:https://docs.spring.io/spring-framework/docs/5.2.24.RELEASE/spring-framework-reference/

image-20230523222649313

為什么需要學習 Spring?

  1. 簡化我們的企業級應用程式的開發,提升我們的開發效率,
  2. 學 Java 的路上不得不學 Spring,不學直接用 Spring Boot 是可以,開箱即用,但是很難學懂,可能只是會用,不能知其然而知其所以然,
  3. 面試會問的啊!作業會用的啊!所以需要學嘛!OK!

Spring 這個詞,指的是什么?

Spring 這個術語在不同的背景關系中有不同的含義,它可以用來指代 Spring Framework 專案本身,這是夢開始的地方,

后來隨著時間的推移,其他基于 Spring Framework 構建的專案也相繼出現,當人們說 Spring 時,通常指整個專案家族,不過,在本系列中,我們就只指代它本身,即 Spring Framework 本身,

Spring Framework 被分為多個模塊,應用程式可以選擇需要哪些模塊,核心容器模塊包括配置模型和依賴注入機制等內容,除此之外,Spring Framework 還為不同型別應用架構提供了基礎支持,包括訊息傳遞、事務資料和持久化以及 Web 開發等領域,并且同時提供了基于 ServletSpring MVC Web 框架和并行運行的 Spring WebFlux 回應式 Web 框架,

Spring 的模塊

實際上,Spring Framework 大約由 20 個模塊組成,這些模塊分為核心容器、資料訪問/集成、Web、AOP(面向切面編程)、儀表板、訊息和測驗等,如官網上給出的這張圖所示:

spring overview

Core Container(核心模塊)

當我們談論 Spring 的核心容器時,我們指的是一些模塊,它們共同構成了這個框架的基礎,這些模塊包括 spring-corespring-beansspring-contextspring-context-supportspring-expression

首先,讓我們來了解一下 spring-corespring-beans 模塊,它們提供了一些基本功能,其中最重要的是「IoC(控制反轉)」和「依賴注入」,簡單來說,IoC 允許我們將物件的創建和管理交給框架來處理,而不是我們自己手動創建和管理,依賴注入則是一種將物件之間的依賴關系注入到它們之間的程序,這樣可以實作物件之間的解耦,

另外,BeanFactory 是一個工廠模式的復雜實作,它的作用是消除撰寫單例模式的需要,并且允許我們將物件的配置和規范與實際的程式邏輯分離開來,

接下來是 Contextspring-context)模塊,它是在 CoreBeans 模塊的基礎上構建的,Context 模塊提供了一種類似于 JNDI(Java命名和目錄介面)注冊表的方式來訪問物件,除了繼承 Beans 模塊的功能外,Context 模塊還添加了對國際化、事件傳播、資源加載等功能的支持,它還能夠通過 Servlet 容器等方式透明地創建背景關系,此外,Context 模塊還支持一些 Java EE 特性,如 EJB(企業級 Java Bean)、JMX(Java管理擴展)和基本的遠程處理,在 Context 模塊中,ApplicationContext 介面是重點關注的物件,另外,spring-context-support 模塊為將常見的第三方庫集成到 Spring 應用程式背景關系中提供了支持,尤其是在快取(EhCache、JCache)和調度(CommonJ、Quartz)方面,

最后,我們有 spring-expression 模塊,它提供了一個強大而靈活的運算式語言,用于在運行時查詢和操作物件圖(object graph),該語言是 JSP 2.1 規范中統一運算式語言(unified EL)的擴展,它支持設定和獲取屬性值、屬性賦值、方法呼叫、訪問陣列、集合和索引器的內容,以及邏輯和算術運算子、命名變數等,通過 Spring IoC 容器,我們還可以按名稱檢索物件,此外,該運算式語言還支持串列投影、選擇和常見的串列聚合操作,

AOP 和 Instrumentation

spring-aop 模塊是 Spring 框架中用于實作面向切面編程的一部分,它遵循 AOP Alliance 標準,

那么什么是面向切面編程呢?簡單來說,它允許我們在代碼中定義方法的攔截器和切入點,從而將某些功能與實際業務邏輯分離開來,以實作更清晰的代碼結構和更好的模塊化,舉個例子,比如當我們需要在代碼中引入一些日志記錄、安全性檢查、性能監控的代碼,那么這些代碼就是橫切關注點,我們可以使用 AOP 來實作這些代碼的引入,而不是將這些代碼分散到各個業務邏輯中,通過使用 AOP,我們可以將這些通用的橫切關注點定義為切面,并將它們應用到適當的方法上,從而實作代碼的解耦和重用,

此外,Spring 還提供了單獨的 spring-aspects 模塊,用于與 AspectJ 進行集成,AspectJ 是一個功能強大的 AOP 框架,通過與 Spring 的集成,我們可以利用 AspectJ 的更高級功能來實作更復雜的切面編程,

另外還有一個模塊叫做 spring-instrument,它提供了類儀表化(instrumentation)的支持和類加載器實作,在某些應用服務器中可以使用,這個模塊的作用是提供一些工具和機制,以便在運行時對類進行修改和增強,從而實作一些特定的需求,例如,spring-instrument-tomcat 模塊是針對 Tomcat 服務器的特定實作,它提供了用于儀表化的代理機制,

Messaging

Spring 4 引入了一個名為 spring-messaging 的模塊,它包含了 Spring Integration 專案的核心抽象,例如 MessageMessageChannelMessageHandler 等等,這個模塊的目的是提供訊息傳遞應用程式的基礎支持,

通過 spring-messaging 模塊,我們可以構建基于訊息傳遞的應用程式,其中不同組件之間通過訊息進行通信,以下是一些關鍵概念和功能:

  1. Message訊息是應用程式中傳遞的資料單元,它可以包含有關訊息內容和元資料的資訊,
  2. MessageChannel訊息通道是訊息在應用程式中傳遞的路徑,它充當發送者和接收者之間的中介,
  3. MessageHandler訊息處理器是負責接收和處理訊息的組件,它可以執行特定的業務邏輯或轉發訊息給其他組件,

spring-messaging 模塊還引入了一組注解,用于將訊息映射到方法,類似于 Spring MVC 中基于注解的編程模型,這使得我們可以通過簡單的注解來定義訊息的處理方式,讓代碼更加清晰和易于理解,

Data Access/Integration

當我們處理資料時,Spring 的資料訪問/集成層提供了一些模塊,以幫助我們更輕松地與資料庫和其他資料源進行互動,

  • spring-jdbc 模塊簡化了與資料庫進行互動的程序,它提供了一個抽象層,讓我們可以使用更簡單、更易于理解的代碼來執行資料庫操作,而不必處理繁瑣的細節,
  • spring-tx 模塊支持事務管理,事務是用來確保資料的一致性和完整性的機制,使用 Spring 的事務管理模塊,我們可以以編程式或宣告式的方式來管理事務,從而更輕松地處理資料的變化和操作,
  • spring-orm 模塊提供了與物件關系映射(ORM)框架的集成,ORM 是一種將資料庫中的資料映射到物件的技術,它使得我們可以使用面向物件的方式來操作資料庫,通過使用 Spring 的 ORM 模塊,我們可以方便地集成流行的 ORM 框架(如 Hibernate、MyBaits),并結合 Spring 的其他功能,例如簡單的宣告式事務管理,
  • spring-oxm 模塊提供了物件和 XML 之間的映射支持,它可以幫助我們將 Java 物件轉換成 XML 格式,或者將 XML 轉換回 Java 物件,這對于處理與 XML 相關的資料非常有用,
  • spring-jms 模塊用于處理 Java 訊息服務(Java Message Service),它提供了生成和消費訊息的功能,從 Spring Framework 4.1 版本開始,它還與 spring-messaging 模塊進行了集成,使得基于訊息傳遞的應用程式開發更加方便,

Web

Web 層由 spring-webspring-webmvc 等模塊組成,

  • spring-web 模塊提供了基本的 Web 功能,它包含處理 MultipartFile 上傳使用 Servlet 監聽器進行初始化 IoC 容器的功能,該模塊還包含與Web相關的部分,如 HTTP 客戶端Spring 遠程支持,以便與其他Web服務進行通信,
  • spring-webmvc 模塊(也稱為Web-Servlet模塊)是 Spring 框架中用于構建 Web 應用程式的重要模塊,它實作了 Model-View-Controller(MVC)架構和 RESTful Web 服務,使用 Spring MVC,我們可以將業務邏輯代碼和 Web 表單清晰地分離,實作更好的代碼組織和可維護性,該模塊與 Spring 的其他功能無縫集成,使我們能夠輕松地使用依賴注入、事務管理等功能來構建靈活和可擴展的Web應用程式,

Test

spring-test 模塊支持使用 JUnit 或 TestNG 對 Spring 組件進行單元測驗和集成測驗,它提供了一致的 Spring ApplicationContext 加載和快取機制,并提供了 Mock 物件,便于我們進行測驗,

Spring 的歷史

Spring 框架于 2003 年誕生,是對早期 J2EE 規范復雜性的回應,雖然有些人認為 Java EE 和 Spring 存在競爭關系,但實際上,Spring 與 Java EE 相輔相成,Spring 編程模型并不包含 Java EE 平臺規范;相反,它集成了來自 EE 大傘下精心挑選的個別規范:

  • Servlet API(JSR 340)

  • WebSocket API(JSR 356)

  • Concurrency Utilities(JSR 236)

  • JSON Binding API(JSR 367)

  • Bean Validation(JSR 303)

  • JPA(JSR 338)

  • JMS (JSR914),以及必要時用于事務協調的 JTA/JCA 設定,

Spring 框架還支持依賴注入(JSR330)和常見注解(JSR250)規范,我們開發人員可以選擇使用這些規范而非由 Spring 框架提供的特定機制,

從 Spring Framework 5.0 開始,Spring 要求 Java EE 7 級別(例如 Servlet 3.1+,JPA 2.1+)作為最低要求,同時在運行時提供與 Java EE 8 級別的新API(例如 Servlet 4.0、JSON Binding API)的開箱即用集成,這使得 Spring 完全兼容 Tomcat 8 和 9、WebSphere 9 以及 JBoss EAP 7 等服務器,

隨著時間推移,在應用程式開發中 Java EE 的角色也在不斷演變,在 Java EE 和 Spring 的早期,應用程式是為部署到應用服務器而創建的,如今,在 Spring Boot 的幫助下,應用程式以 devops 和云友好的方式創建,Servlet 容器被嵌入其中并且易于更改,從 Spring Framework5 開始,WebFlux 應用程式甚至不直接使用 Servlet API,并且可以運行在非 Servlet 容器(例如 Netty )上,

Spring 繼續創新和發展,除了 Spring Framework 之外,還有其他專案,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等等,

Spring 設計理念

當你學習一個框架時,了解它所做的事情以及遵循的原則同樣重要,以下是 Spring Framework 的指導原則:

  • 在每個層面提供選擇:Spring 允許我們盡可能地推遲設計決策,例如,我們可以通過配置切換應用程式所連接的資料庫而無需更改代碼,對于許多其他基礎設施問題和第三方API的集成也是如此,

  • 容納不同的觀點:Spring 非常靈活,沒有固定的方式來解決應用程式的需求,它提供了多種方法來完成相同的任務,以適應不同開發者的不同觀點和需求,

  • 保持強大的向后兼容性:Spring Framework 的設計經過精心考慮,盡量減少對你已有代碼的影響,這意味著當我們升級到新的版本時,我們的應用程式仍然可以正常運行,而無需擔心因為框架更新而導致問題,Spring 還支持多個 Java 開發工具包(JDK)版本和第三方庫,這樣你可以繼續使用 Spring 來開發和維護你的應用程式,

  • 關注 API 設計:Spring 團隊花費了大量的時間和精力來設計直觀易懂、穩定可靠的 API,他們努力確保 API 在多個版本和多年的時間跨度中保持一致性,這樣我們就可以更輕松地理解和使用它們,

  • 確立高標準代碼質量:Spring Framework 強調清晰、準確的檔案注釋,它是少數幾個代碼結構清晰且包之間沒有回圈依賴關系的專案之一,這種高標準的代碼質量有助于提高框架的可維護性和可擴展性,

所以什么是 Spring?

Spring 是一個輕量級的、開源的 Java 框架,實作了 IoC(Inversion of Control)和 AOP(Aspect Oriented Programming)等功能,

在 Spring 的官網介紹中,Spring 被描述為「構建企業級應用程式的一站式框架」,它提供了如下的優點:

  • 便于開發:Spring 的組件化和松耦合的特性使得開發變得更加簡單,開發者可以更加專注于業務邏輯的實作,
  • 便于測驗:Spring 的代碼結構和依賴注入機制使得測驗變得更加容易,
  • 便于集成:Spring 的可插拔的架構,使得其可以方便地與其他框架和組件進行集成,
  • 便于部署:Spring 應用程式的部署非常簡單,開發者只需要將應用程式打成 war 包,然后將其部署到支持 Java 應用程式的服務器上即可,

Spring 框架包含了如下的模塊:

  • 核心容器(Core Container):包括 IoC 和 DI(Dependency Injection,依賴注入)、事件、資源、國際化、驗證、資料系結、型別轉換、SpEL 和 AOP 等核心功能,
  • AOP:支持面向切面編程,
  • 工具(Instrumentation):提供了一系列的工具和支持,如 JMS、JCA、JMX、電子郵件、任務調度和快取等,
  • 資料訪問/集成(Data Access/Integration):包括對 JDBC、ORM 框架(如 Hibernate、MyBatis)事務處理,DAO 等的支持,
  • Web:包括對 Web 應用程式開發的支持,如 Spring MVC 和 Spring WebFlux 網路框架等,
  • 測驗(Test):包括對 JUnit、TestNG 等的支持,

沒有 Spring 和有 Spring 的區別

那到底是怎樣簡化了呢?體現在哪里呢?下面,為了直觀展示 Spring 是如何簡化我們開發的程序的,將寫一個代碼示例,讓大家看看是怎樣的區別,

物件管理

當沒有 Spring 時,Java EE 開發的主要方式是使用 JSP、Servlet 和 EJB 等技術,你想一想,剛開始學習 JSP 的時候,是不是這樣,沒有任何框架,純純自己操作所有東西,

對于系統中多個物件之間的關系,沒有 Spring 的時候,我們需要手動創建和管理物件之間的依賴關系

這句話可能初學者不是很好理解,我舉個例子,

這里有兩個設計好的系統中的兩個類,Employee 和 Department(用于描述員工以及部門資訊的類),

Employee.java:

public class Employee {
    private int id;
    private String name;
    private Department department;
    
    // 省略 getter 和 setter
}

Department.java:

public class Department {
    private int id;
    private String name;
    
    // 省略 getter 和 setter
}

未使用 Spring 的時候

我們現在的業務假設是需要列印員工的部門資訊,那么我們就需要手動管理它們之間的依賴關系的,代碼如下:

public class Main {
    public static void main(String[] args) {
        Department department = new Department(1, "Just do IT");
        Employee employee = new Employee(1, "god23bin", department);
        System.out.println(employee.getDepartment().getName());
    }
}

你創建一個 Employee 物件,就必須自己再去創建一個 Department 物件(因為 Employee 物件依賴于 Department 物件),并將 Department 物件給關聯到 Employee 物件上,是吧,現在,我相信螢屏前的你已經懂了所謂的手動創建和管理物件之間的依賴關系了,

使用 Spring 的時候

當你使用 Spring 的時候,就完全不需要這么做,依然是這個例子,現在我使用 Spring 來操作,物件的管理就交給 Spring 處理,來看看我怎么寫的:

@Configuration
public class AppConfig {
    
    @Bean
    public Department department() {
        return new Department(1, "Just do IT");
    }
    
    @Bean
    public Employee employee() {
        return new Employee(1, "god23bin", department());
    }
    
}

我寫了一個 AppConfig 類,在類上使用了一個 @Configuration 注解,表示這是一個配置類,

接著,寫了兩個方法,分別回傳了一個員工物件和一個部門物件,而且在方法上使用了一個 @Bean 注解,表示這個方法回傳的物件是交給 Spring IoC 進行管理的,

這兩個物件都是通過呼叫構造方法來創建的,其中 Department 物件則被注入到了 Employee 物件中,(注入,你就理解成 setXxx 方法)

在最上面進行介紹的時候,有一個概念,就是「容器」,這個容器人們也習慣稱「Ioc 容器」,實際上就是 Spring 用來存放與管理應用程式中所有交給它的物件的,

現在在這個容器中,就有 Department 物件和 Employee 物件,

我們的業務依舊是列印員工的部門資訊,此刻,我們只需要從「容器」中獲取我們需要的物件就可以了,直接獲取員工物件,不用手動自己 new 一個員工物件,也不需要自己 new 一個部門物件了,

我們通過 AnnotationConfigApplicationContext 來加載配置類 AppConfig,然后通過 getBean 方法來獲取 Employee 物件,此程序 Spring 完成了依賴注入的效果,Employee 物件是具有 Department 物件的,

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Employee employee = context.getBean(Employee.class);
        System.out.println(employee.getDepartment().getName());
    }
}

不過,實際上,我們在真正的專案中,并不會這樣去使用,即不會去手動寫 context.getBean() 等這些代碼,而是直接通過依賴注入的方式,這個后面再寫咯,現在知道是怎么回事就 OK 啦!

當然,由于篇幅有限,可能目前你還沒能理解這樣做有什么好處,可能會有各種疑惑,沒關系,慢慢學習下去就會迎刃而解了,

其他的管理

在沒有 Spring 時,我們需要在代碼中手動處理一些與業務邏輯無關的問題,比如連接池和事務管理等,而有了 Spring 之后,這些問題都可以通過 Spring 的 API 和組件來解決,從而使代碼更加簡潔易讀,

總結

Spring 是一個很牛的、開源的 Java 框架,實作了 IoC(Inversion of Control,控制反轉)和 AOP(Aspect Oriented Programming,面向切面編程)等功能,

Spring 的核心特點包括便于開發、便于測驗、便于集成和便于部署,啥都方便,

Spring 框架的出現簡化了 Java EE(Enterprise Edition)開發的程序,在沒有使用 Spring 的情況下,開發 Java EE 應用程式需要手動創建和管理物件之間的依賴關系,而使用 Spring 可以通過配置和注解來實作物件的自動管理和依賴注入,Spring 還提供了許多其他模塊和功能,如資料訪問/集成、Web 開發支持、AOP、工具等,使開發人員可以更加便捷地開發企業級應用程式,

總之,學習 Spring 可以幫助我們更好地理解和應用現代企業級 Java 開發的基本概念和最佳實踐,提高開發效率和代碼質量,

參考

https://docs.spring.io/spring-framework/docs/5.0.0.RC3/spring-framework-reference/overview.html#spring-introduction

https://docs.spring.io/spring-framework/docs/5.2.24.RELEASE/spring-framework-reference/overview.html#overview

最后的最后

希望各位螢屏前的靚仔靚女們給個三連!你輕輕地點了個贊,那將在我的心里世界增添一顆明亮而耀眼的星!

咱們下期再見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553195.html

標籤:Java

上一篇:Spring原始碼:Bean生命周期(終章)

下一篇:返回列表

標籤雲
其他(159545) Python(38162) JavaScript(25444) Java(18110) C(15231) 區塊鏈(8267) C#(7972) AI(7469) 爪哇(7425) MySQL(7207) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4575) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1941) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 什么是 Spring?為什么學它?

    歡迎來到本篇文章!在這里,我將帶領大家快速學習 Spring 的基本概念,并解答兩個關鍵問題:什么是 Spring,以及為什么學習 Spring。

    廢話少說,下面,我們開始吧! ......

    uj5u.com 2023-05-24 07:57:03 more
  • Spring原始碼:Bean生命周期(終章)

    本系列前面講解了Spring的bean定義、bean實體化、bean初始化等生命周期階段。這些步驟使我們能夠了解bean從創建到準備好使用所經歷的程序。但是,除了這些步驟,bean的銷毀也是非常重要的一步。在本系列的最后,我們將深入探討bean的銷毀程序,包括在什么情況下會發生銷毀、銷毀的順序以及如... ......

    uj5u.com 2023-05-24 07:56:54 more
  • java IO流

    # Java IO流 ## 什么是流? 概念:記憶體和存盤設備之間傳輸資料的通道。 資料借助流傳輸。 流分類: - 按照方向:輸入流(將存盤設備中的內容讀入到記憶體中)和輸出流(將記憶體中的內容寫入到存盤設備中) - 按照單位:位元組流(以位元組為單位,可以讀寫所有資料)和字符流(以字符為單位,只能讀取文本數 ......

    uj5u.com 2023-05-24 07:56:38 more
  • 小愛同學呼叫本地jar -巴法云

    本文使用的是巴法云 你也可以使用其他的物聯網平臺 并且 也不一定是小愛 比如小度啊 等等其他的一下應該也是可以實作的
    調到java里面之后 剩下的事情大家就可以想干嘛就干嘛了 ......

    uj5u.com 2023-05-24 07:56:24 more
  • 解決啟動jar包報錯 錯誤 找不到或無法加載主類 jar

    #### 錯誤: 找不到或無法加載主類 jar ##### 問題描述: 在使用springboot框架對專案打包后,手動使用命令java -jar 包名啟動jar包,報錯:錯誤: 找不到或無法加載主類 jar。 網上找了各辦法,都是加maven插件,打成可執行jar包 ``` org.springf ......

    uj5u.com 2023-05-24 07:56:10 more
  • Netty實戰(一)

    [TOC](Nett的概念及體系結構) # 第一章 Java網路編程 最早期的 Java API(java.net)只支持由本地系統套接字庫提供的所謂的阻塞函式,像下面的那樣 ```java //創建一個新的 ServerSocket,用以監聽指定埠上的連接請求 ServerSocket serv ......

    uj5u.com 2023-05-24 07:56:02 more
  • Spring Boot 3.1 正式發布,王炸!!

    ## Spring Boot 3.1 正式發布 大家好,我是R哥。 上一篇:[Spring Boot 3.0 正式發布,王炸!!](https://mp.weixin.qq.com/s/p-rDuyNv68hQvwRBrm5KWA) Spring Boot 3.0 發布半年左右,Spring Boo ......

    uj5u.com 2023-05-24 07:55:54 more
  • springcloud~gateway網關

    有時間,我們在搭建微服務時,總希望拿一個比較單純的,沒有污染其它代碼的專案來從頭開始做,今天我們來建設一個最簡單的,gateway專案,它被注冊到nacos里,路由配置也存到nacos里,動態實作更新配置功能。 # 依賴配置 > 版本:com.alibaba.cloud:spring-cloud-s ......

    uj5u.com 2023-05-24 07:50:39 more
  • 學習筆記-Spring事務

    學習的文章 [小姐姐非要問我:spring編程式事務是啥? (qq.com)](https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648936779&idx=2&sn=a6255c7d436a62af380dfa6b326fd4e7&chk ......

    uj5u.com 2023-05-24 07:45:32 more
  • 【2023.03.20】P4710 「物理」平拋運動

    題目傳送門: >[【洛谷】P4710 [物理]平拋運動](https://www.luogu.com.cn/problem/P4710 "【洛谷】P4710 [物理]平拋運動") ## Step 1:前置芝士 您需要知道并了解以下芝士: 1. 數學: - 三角函式; 2. 物理: - 加速度公式; ......

    uj5u.com 2023-05-24 07:44:42 more