专题一: 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模式:

java 复制代码
<?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>

以下是使用注解的示例:

java 复制代码
@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

面向切面编程(AOP)

Spring 的 AOP 框架允许模块化处理日志记录、安全性和事务管理等关注点。切面使得横切关注点与主要业务逻辑分离。

定义切面

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

java 复制代码
@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 中的控制器负责处理用户请求并返回适当的响应。

java 复制代码
@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 的示例:

html 复制代码
<!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 仓库的示例:

java 复制代码
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByLastName(String lastName);
}

Spring Security

Spring Security 是一个功能强大且可定制的认证和访问控制框架。它为 Java 应用程序提供全面的安全服务。

安全配置

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

java 复制代码
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected 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 应用程序可以用最少的配置创建:

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

Spring Cloud

Spring Cloud 提供构建分布式系统的工具,包括服务发现、断路器和配置管理。

Spring Cloud 通过其工具套件促进微服务的开发。以下是使用 Eureka 的服务注册示例:

java 复制代码
@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 {
    @Transactional
    public void performTransaction() {
        // 业务逻辑
    }
}

使用 Spring 的消息传递

Spring Integration 和 Spring AMQP 提供了对消息传递的支持,使得开发消息驱动的应用程序成为可能。

Spring Integration 示例
java 复制代码
@MessagingGateway
public interface MyGateway {
    @Gateway(requestChannel = "inputChannel")
    void sendToChannel(String data);
}

@Configuration
public class IntegrationConfig {
    @Bean
    public IntegrationFlow integrationFlow() {
        return IntegrationFlows.from("inputChannel")
                .handle(System.out::println)
                .get();
    }
}

总结

Spring 框架是企业级 Java 开发的一个多功能且全面的框架。通过理解其核心概念和模块,开发人员可以利用其强大的功能构建健壮、可扩展且易维护的应用程序。

相关推荐
喜欢猪猪7 分钟前
两个线程之间是如何通信的呢?
java·开发语言
co松柏10 分钟前
在非 antd pro 项目中使用 umi OpenAPI
java·前端
java66666888811 分钟前
Spring Boot中的数据加密与解密
java·spring boot·后端
NightHacker22 分钟前
什么是AOP思想?
java·开发语言
番茄炒西红柿炒蛋27 分钟前
秋招Java后端开发冲刺——非关系型数据库篇(MongoDB)
java·mongodb·nosql
虫小宝28 分钟前
高可用电商返利APP架构设计与实现分享
java·开发语言
GoodStudyAndDayDayUp42 分钟前
一个简单的spring+kafka生产者
sql·spring·kafka
java6666688881 小时前
如何在Java中使用Maven进行项目管理
java·开发语言·maven
天草二十六_简村人1 小时前
nexus未开启匿名访问Anonymous Access,访问maven元数据maven-metadata,报401未授权Unauthorized错误
xml·java·ci/cd·jdk·maven·devops
Serendipity1 小时前
Mybatis
java·数据库·mybatis