專題一: Spring生態初探

咱們先從整體脈絡上看下Spring有哪些模塊,重要的概念有個直觀印象。?從Spring框架的整體架構和組成對整體框架有個認知。

?Spring框架基礎概念

?Spring基礎 - Spring和Spring框架組成
上圖是從官網4.2.x獲取的原圖,目前我們使用最廣法的版本應該都是5.x,5版本移除了Web模塊中的Portlet子模塊,新增了WebFlux模塊,同時新增了公共的JCl日志管理模塊。
我們JVM專題模塊,通過一張圖大概了解Java是如何運行的,如何通過將我們編寫的Java代碼編譯成JVM可以認識的字節碼的如何實現跨平臺運行的。
同樣Spring咱們也來瞅瞅Spring是將我們編寫的Xml、注解或者其他配置文件編程Spring可以管理的Bean的?

在正式進入Spring專題之前,咱們先熟悉一下相關概念
Spring框架是一個開源的Java平臺,它提供了全面的基礎設施支持,以便您可以更容易地開發Java應用程序。Spring處理了基礎設施,這樣您就可以專注于您的應用程序。以下是對Spring框架整體架構和組成的概述:

控制反轉(IoC)和依賴注入(DI)

Spring 框架的核心是其控制反轉(IoC)容器,該容器管理應用程序對象(稱為 bean)的創建、配置和生命周期。依賴注入(DI)是一種實現 IoC 的設計模式,容器在運行時注入對象的依賴關系,減少組件之間的耦合,增強模塊化。

Bean 配置

Spring 中的 Bean 可以使用 XML、注解或基于 Java 的配置進行配置。

下面是Xml模式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="jmUser" class="org.springframework.dto.JmUser"><property name="name" value="測試一" /><property name="age" value="18" /></bean></beans>

以下是使用注解的示例:?

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

面向切面編程(AOP)

Spring 的 AOP 框架允許模塊化處理日志記錄、安全性和事務管理等關注點。切面使得橫切關注點與主要業務邏輯分離。

定義切面

切面可以使用注解或 XML 定義。以下是使用注解的示例:


@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint joinPoint) {System.out.println("Method Called: " + joinPoint.getSignature().getName());}
}

Spring 模塊

Spring MVC

Spring MVC 是一個用于構建 Web 應用程序的框架。它遵循模型-視圖-控制器(MVC)設計模式,促進關注點的清晰分離。

控制器

Spring MVC 中的控制器負責處理用戶請求并返回適當的響應。


@Controller
public class HomeController {@GetMapping("/")public String home(Model model) {model.addAttribute("message", "Welcome to Spring MVC");return "home";}
}
視圖

Spring MVC 中的視圖可以使用 JSP、Thymeleaf 或 FreeMarker 等技術實現。以下是使用 Thymeleaf 的示例:


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Home</title>
</head>
<body><h1 th:text="${message}">Welcome</h1>
</body>
</html>

Spring Data

Spring Data 簡化了數據訪問,提供了一致的編程模型來訪問不同的數據存儲。它包括用于關系數據庫(Spring Data JPA)、NoSQL 數據庫(Spring Data MongoDB)等的模塊。

Spring Data 倉庫抽象了數據訪問層,減少了樣板代碼。以下是一個 JPA 倉庫的示例:


public interface UserRepository extends JpaRepository<User, Long> {List<User> findByLastName(String lastName);
}

Spring Security

Spring Security 是一個功能強大且可定制的認證和訪問控制框架。它為 Java 應用程序提供全面的安全服務。

安全配置

Spring 中的安全配置可以使用基于 Java 的配置進行定義:


@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN").antMatchers("/**").permitAll().and().formLogin();}
}

Spring Boot

Spring Boot 通過提供約定優于配置和嵌入式服務器來簡化 Spring 應用程序的開發。

創建 Spring Boot 應用程序

一個典型的 Spring Boot 應用程序可以用最少的配置創建:


@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

Spring Cloud

Spring Cloud 提供構建分布式系統的工具,包括服務發現、斷路器和配置管理。

Spring Cloud 通過其工具套件促進微服務的開發。以下是使用 Eureka 的服務注冊示例:


@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

1. 客戶端

  • IoT、Mobile、Browser:這些是訪問微服務系統的不同客戶端設備。它們通過 API Gateway 來訪問系統中的微服務。

2. API Gateway

  • API Gateway:API 網關是客戶端與微服務之間的唯一入口。它負責請求路由、安全認證、負載均衡、監控和流量管理等功能。通過 API 網關,客戶端可以統一地訪問不同的微服務,而不需要直接與每個微服務進行交互。

3. 微服務

  • Microservices:微服務是系統的核心業務邏輯,每個微服務都是一個獨立的功能模塊,負責特定的業務功能。微服務之間通過輕量級的通信協議(如 HTTP 或消息隊列)進行交互。

4. 服務注冊與發現

  • Service Registry:服務注冊中心用于管理微服務的注冊和發現。每個微服務啟動時,會將自己的地址和端口注冊到服務注冊中心。其他微服務通過查詢服務注冊中心來找到需要調用的微服務地址。常用的服務注冊中心有 Eureka、Consul、Zookeeper 等。

5. 配置管理

  • Config Server:配置服務器用于集中管理微服務的配置文件。微服務啟動時會從配置服務器獲取配置,這樣可以確保所有微服務使用一致的配置,并且可以在不重啟微服務的情況下動態更新配置。

6. 分布式跟蹤

  • Distributed Tracing:分布式追蹤系統用于監控和分析微服務之間的調用鏈路,幫助開發和運維人員追蹤請求的流轉路徑,識別性能瓶頸和故障點。常用的分布式追蹤系統有 Zipkin、Jaeger 等。

小結

這張圖展示了一個典型的基于 Spring Cloud 的微服務架構,包括了 API 網關、服務注冊中心、配置服務器、分布式追蹤和微服務模塊。客戶端通過 API 網關與系統交互,API 網關負責請求路由和安全管理;微服務通過服務注冊中心實現動態的服務發現和調用;配置服務器集中管理微服務的配置;分布式追蹤系統幫助監控和分析微服務的調用鏈路。

這種架構設計使得系統具有良好的擴展性和靈活性,能夠支持大規模的分布式應用,并且易于管理和維護。

高級主題

事務管理

Spring 的事務管理框架抽象了事務管理的復雜性,允許聲明式事務管理。


@Service
public class TransactionalService {@Transactionalpublic void performTransaction() {// 業務邏輯}
}

使用 Spring 的消息傳遞

Spring Integration 和 Spring AMQP 提供了對消息傳遞的支持,使得開發消息驅動的應用程序成為可能。

Spring Integration 示例

@MessagingGateway
public interface MyGateway {@Gateway(requestChannel = "inputChannel")void sendToChannel(String data);
}@Configuration
public class IntegrationConfig {@Beanpublic IntegrationFlow integrationFlow() {return IntegrationFlows.from("inputChannel").handle(System.out::println).get();}
}

總結

Spring 框架是企業級 Java 開發的一個多功能且全面的框架。通過理解其核心概念和模塊,開發人員可以利用其強大的功能構建健壯、可擴展且易維護的應用程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37214.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub每日最火火火項目(6.30)

項目名稱&#xff1a;modelscope / DiffSynth - Studio 項目介紹&#xff1a;該項目致力于讓用戶體驗擴散模型的神奇魅力。擴散模型是一種具有廣泛應用前景的技術&#xff0c;在圖像生成、音頻處理等領域展現出了強大的能力。通過DiffSynth - Studio&#xff0c;用戶可以深入探…

Arrays.asList 和 java.util.ArrayList 區別

理解 Java 中的 Arrays.asList 和 java.util.ArrayList 的區別 在 Java 編程中&#xff0c;Arrays.asList 方法和 java.util.ArrayList 是兩種常用的處理列表數據的方式。雖然它們在功能上看起來相似&#xff0c;但在內部實現和使用上有著本質的不同。本文將探討這兩種方式的區…

一區算法MPA|海洋捕食者算法原理及其代碼實現(Matlab/Python))

Matlab/Python&#xff1a; 本文KAU將介紹一個2020年發表在1區期刊ESWA上的優化算法——海洋捕食者算法 (Marine Predators Algorithm&#xff0c;MPA)[1] 該算法由Faramarzi等于2020年提出&#xff0c;其靈感來源于海洋捕食者之間不同的覓食策略、最佳相遇概率策略、海洋記…

【Linux】IO多路復用——select,poll,epoll的概念和使用,三種模型的特點和優缺點,epoll的工作模式

文章目錄 Linux多路復用1. select1.1 select的概念1.2 select的函數使用1.3 select的優缺點 2. poll2.1 poll的概念2.2 poll的函數使用2.3 poll的優缺點 3. epoll3.1 epoll的概念3.2 epoll的函數使用3.3 epoll的優點3.4 epoll工作模式 Linux多路復用 IO多路復用是一種操作系統的…

MCU復位時GPIO是什么狀態?

大家一定遇到過上電或者復位時外部的MOS電路或者芯片使能信號意外開啟&#xff0c;至此有經驗的工程師就會經常關心一個問題&#xff0c;MCU復位時GPIO是什么狀態&#xff1f;什么電路需要外部加上下拉&#xff1f; MCU從上電到啟動&#xff0c;實際可分為復位前和復位后、初始…

【WPF】Windows系統桌面應用程序編程開發新手入門-打造自己的小工具

電腦Windows系統上的桌面程序通常是用Visual Studio 開發工具編寫出來的&#xff0c;有兩種開發方式供選擇&#xff0c;一種是WindowForm&#xff0c;簡稱WinForm&#xff0c;另一種是Windows Presentation Foundation&#xff0c;簡稱WPF&#xff0c;這里將學習WPF項目。 文章…

大物3錯題整理

平衡位置&#xff1a;在O點上的位置 相位&#xff1a; 當N很大的時候&#xff0c;wxwywz。因此&#xff0c;平均平動動能除以3&#xff0c;就是能量均分定理。 W F在x上的積分 Π時無單位 180&#xff0c;就是單位 1rad&#xff0c;rad就是單位 左手定則、右手定則、安培定…

C++模板類與繼承

1&#xff09;模板類繼承普通類&#xff08;常見&#xff09;。 2&#xff09;普通類繼承模板類的實例化版本。 3&#xff09;普通類繼承模板類。(常見) 4&#xff09;模板類繼承模板類。 5&#xff09;模板類繼承模板參數給出的基類&#xff08;不能是模板類&#xff09;。 示…

【抽代復習筆記】24-群(十八):循環群的兩道例題

例1&#xff1a;證明&#xff1a; &#xff08;1&#xff09;三次交錯群A3是循環群&#xff0c;它與(Z3,)同構&#xff0c;其中Z3 {[0],[1],[2]}&#xff1b; &#xff08;2&#xff09;G {1,i,-1,-i}&#xff0c;G上的代數運算是數的乘法&#xff0c;則G是一個循環群&…

如何解決三菱軟件提示 起動MELSOFT Mediative Server失敗

前言&#xff1a; 注意&#xff0c;這篇文章僅針對如何解決 起動MELSOFT Mediative Server失敗 的問題。對于其他相關的問題&#xff0c;請搜索其他相應的解決辦法。 本人是在重裝三菱GX Works軟件時遇到此問題的。后來搜索發現無人能妥善的關閉這個提示。因此本文介紹如何關…

【Web3項目案例】Ethers.js極簡入門+實戰案例:實現ERC20協議代幣查詢、交易

蘇澤 大家好 這里是蘇澤 一個鐘愛區塊鏈技術的后端開發者 本篇專欄 ←持續記錄本人自學智能合約學習筆記和經驗總結 如果喜歡拜托三連支持~ 目錄 簡介 前景科普-ERC20 Ethers極簡入門教程&#xff1a;HelloVitalik&#xff08;非小白可跳&#xff09; 教程概覽 開發工具 V…

魔行觀察-烤匠麻辣烤魚-開關店監測-時間段:2011年1月 至 2024年6月

今日監測對象&#xff1a;烤匠麻辣烤魚&#xff0c;監測時間段&#xff1a;2011年1月 至 2024年6月 本文用到數據源獲取地址 魔行觀察http://www.wmomo.com/ 品牌介紹&#xff1a; 2013年&#xff0c;第一家烤匠在成都藍色加勒比廣場開業&#xff0c;隨后幾年成都國金中心店…

超詳細的tomcat安裝以及簡略項目的部署

一、安裝包 安裝路徑&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1JzPQQ2zUdnXi_FaTTG0pvg?pwdriht 提取碼&#xff1a;riht 安裝完之后我們打開&#xff0c;可看見以下目錄結構 二、環境變量配置 首先打開我們電腦的高級環境變量配置 我們先配置一個系統變量…

Variables Reference for vscode

Predefined variables Visual Studio Code 支持在調試、任務配置文件以及一些特定的設置中使用變量替換。這些變量可以使用 ${variableName} 語法在 launch.json 和 tasks.json 文件的某些鍵和值字符串中使用。 Predefined variables Visual Studio Code 支持以下預定義變量…

Zookeeper:Zookeeper JavaAPI操作與分布式鎖

文章目錄 一、Zookeeper JavaAPI操作1、Curator介紹2、創建、查詢、修改、刪除節點3、Watch事件監聽 二、Zookeeper分布式鎖原理 一、Zookeeper JavaAPI操作 1、Curator介紹 Curator是Apache Zookeeper的Java客戶端。常見的Zookeeper Java API&#xff1a; 原生Java API。ZkC…

天氣網站爬蟲及可視化

摘要&#xff1a;隨著互聯網的快速發展&#xff0c;人們對天氣信息的需求也越來越高。本論文基于Python語言&#xff0c;設計并實現了一個天氣網站爬蟲及可視化系統。該系統通過網絡爬蟲技術從多個天氣網站上獲取實時的天氣數據&#xff0c;并將數據進行清洗和存儲。同時&#…

數據倉庫面試題(二)

1. 簡述星型模型和雪花模型的區別&#xff1f;應用場景 &#xff1f; 星型模型&#xff08;Star Schema&#xff09;和雪花模型&#xff08;Snowflake Schema&#xff09;是數據倉庫中常用的兩種維度建模方法&#xff0c;它們在數據組織和設計上有所不同。 星型模型&#xff…

【簡易版tinySTL】 哈希表與移動語義

基本概念 哈希表&#xff08;HashTable&#xff09;是一個重要的底層數據結構, 無序關聯容器包括unordered_set, unordered_map內部都是基于哈希表實現。 哈希表是一種通過哈希函數將鍵映射到索引的數據結構&#xff0c;存儲在內存空間中。哈希函數負責將任意大小的輸入映射到…

【C++】內存分區

目錄 內存分區代碼運行前后區別各分區詳細解釋C內存申請和釋放 內存分區 不同的操作系統對程序內存的管理和劃分會有所不同。 此處是C內存區域劃分主要是針對通用的情況&#xff0c;并不限定在某個特定操作系統上 一般分為4個區&#xff08;有時把全局區拆分成數據區未初始化…

git 命令學習之branch 和 tag 操作

引言 在項目一個迭代過程結束之時&#xff0c;或是一個版本發布之后&#xff0c;我們要進行 新版本的開發&#xff0c;這時就需要對原來的項目代碼進行封存&#xff0c;以及新項目代碼的開始&#xff0c;這時就需要用到 branch 和 tag 操作。下面簡單說說對這兩個操作的理解。…