咱們先從整體脈絡上看下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 開發的一個多功能且全面的框架。通過理解其核心概念和模塊,開發人員可以利用其強大的功能構建健壯、可擴展且易維護的應用程序。