Spring 全家桶使用教程
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:SSM 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Spring 全家桶使用教程
文章目录
- 前言
- 1、Spring Framework
- 1.1 介绍
- 1.2 特点
- 1.3 用途
- 1.4 使用方法
- 1.5 案例展示
- 2、Spring Boot
- 2.1 介绍
- 2.1 特点
- 2.1 用途
- 2.1 使用方法
- 2.1 案例展示
- 3、Spring Cloud
- 3.1 介绍
- 3.2 特点
- 3.3 用途
- 3.4 使用方法
- 3.5 案例展示
- 4、Spring Data
- 4.1 介绍
- 4.2 特点
- 4.3 用途
- 4.4 使用方法
- 4.5 案例展示
- 5、Spring Security
- 5.1 介绍
- 5.2 特点
- 5.3 用途
- 5.4 使用方法
- 5.5 案例展示
- 总结

前言
在当今快节奏的软件开发领域,构建高效、可靠的Java应用程序是每个开发者的追求。为了满足这一需求,Spring Framework推出了一系列衍生产品,统称为Spring全家桶
。这包括了Spring Boot、Spring Cloud、Spring Data、Spring Security
等工具,它们为开发者提供了丰富的功能和工具,帮助他们更高效地构建Java应用程序。本文将深入探讨这些工具的特点、用途和使用方法,帮助读者更好地理解和运用Spring全家桶,提升Java应用程序的开发效率和质量。
1、Spring Framework
Spring框架是一个轻量级的Java开发框架,提供了诸如依赖注入、面向切面编程等功能,帮助开发者构建灵活、可维护的应用程序。下面我将从介绍、特点、用途、使用方法以及案例展示等多个角度来详细分析Spring Framework
。
1.1 介绍
Spring框架是一个全功能的IoC(控制反转)
和AOP(面向切面编程)
容器,旨在简化企业级Java应用程序的开发。它提供了一种轻量级的解决方案,使得开发者可以更专注于业务逻辑的实现,而不必过多关注底层的技术细节。
1.2 特点
- 依赖注入:Spring框架通过依赖注入实现了对象之间的
解耦
,降低
了组件之间的耦合度
。 - 面向切面编程:Spring框架提供了
AOP功能
,可以将横切关注点
(如日志、事务管理)与核心业务逻辑分离
。 - 灵活性:Spring框架支持多种配置方式,如
XML配置、注解配置和Java配置
,使得开发者可以根据需求选择合适的配置方式。 - 模块化:Spring框架拥有多个模块,如
Spring Core、Spring MVC、Spring Data
等,开发者可以根据需求选择相应的模块使用。 - 测试支持:Spring框架提供了丰富的测试支持,可以方便地进行
单元测试和集成测试
。
1.3 用途
Spring框架适用于各种类型的Java应用程序开发,包括Web应用程序、企业级应用程序、批处理应用程序等。它可以帮助开发者提高代码的可维护性、可测试性,并且降低开发成本。
1.4 使用方法
使用Spring框架可以按照以下步骤进行:
- 创建一个新的Spring项目,可以使用
Maven或Gradle
等构建工具来管理项目依赖。 - 配置Spring的核心容器,包括
ApplicationContext和BeanFactory
,可以通过XML配置、注解配置或Java配置来实现。 - 定义和配置Bean,可以通过在配置文件中声明
Bean
的方式或者使用注解来定义Bean。 - 编写业务逻辑代码,通过依赖注入获取Bean实例,实现业务逻辑的功能。
1.5 案例展示
一个基本的学生信息管理系统。在这个案例中,我们将展示如何使用Spring框架来管理学生对象的创建和依赖注入,以及实现基本的学生信息管理功能,如添加学生、查询学生等。
学生类定义
首先,我们定义一个简单的学生类,包含学生的姓名和年龄属性:
public class Student {private String name;private int age;// 省略getter和setter方法
}
学生服务类
接下来,我们定义一个学生服务类,用于管理学生对象的创建和操作:
public class StudentService {private Student student;public void setStudent(Student student) {this.student = student;}public void addStudent(String name, int age) {student = new Student();student.setName(name);student.setAge(age);// 添加学生逻辑}public Student getStudent() {return student;}
}
Spring配置文件
然后,我们创建一个Spring配置文件(可以是XML配置文件或者Java配置类),配置学生对象和学生服务类的Bean:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="student" class="com.example.Student"><property name="name" value="Alice" /><property name="age" value="20" /></bean><bean id="studentService" class="com.example.StudentService"><property name="student" ref="student" /></bean>
</beans>
应用程序入口
最后,我们创建一个应用程序入口类,加载Spring配置文件并获取学生服务类的Bean,然后调用学生服务类的方法:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");StudentService studentService = (StudentService) context.getBean("studentService");studentService.addStudent("Bob", 22);Student student = studentService.getStudent();System.out.println("Student Name: " + student.getName());System.out.println("Student Age: " + student.getAge());}
}
通过以上案例,我们展示了如何使用Spring框架管理对象的创建和依赖注入,以及实现基本的学生信息管理功能。
2、Spring Boot
Spring Boot是一个用于简化Spring应用程序开发和部署的工具
,它基于Spring Framework并提供了许多便利功能,使得开发人员可以更快速地搭建和部署应用程序。下面我将从介绍、特点、用途、使用方法以及案例展示等多个角度来详细分析Spring Boot。
2.1 介绍
Spring Boot是由Pivotal团队提供的开源框架,旨在简化基于Spring的应用程序开发。它通过约定大于配置的原则,尽可能地减少开发人员的配置工作,让开发者能够更专注于业务逻辑的实现。
2.1 特点
- 简化配置:Spring Boot采用
约定大于配置
的理念,提供了许多默认配置,减少了开发者的配置工作。 - 内嵌容器:Spring Boot内置了
Tomcat、Jetty
等常用的Servlet容器
,使得应用程序可以直接以jar包形式运行。 - 自动配置:Spring Boot根据项目中的
依赖自动配置
应用程序,简化了开发过程。 - 监控管理:Spring Boot提供了丰富的
监控和管理
功能,可以方便地监控应用程序的运行状态。 - 集成测试:Spring Boot支持各种测试工具,如
JUnit、Mockito
等,方便进行单元测试和集成测试
。
2.1 用途
Spring Boot适用于各种类型的应用程序开发,包括Web应用程序、RESTful服务、批处理应用程序
等。它可以帮助开发者快速搭建应用程序原型,并且适用于中小型项目的开发。
2.1 使用方法
使用Spring Boot可以按照以下步骤进行:
- 使用
Spring Initializr
创建一个新的Spring Boot项目,选择相应的依赖和配置选项。 - 配置应用程序的属性,如端口号、数据库连接等,可以通过
application.properties或者YAML
文件进行配置。 - 编写业务逻辑代码,Spring Boot会
自动配置和管理应用程序的依赖
,开发者可以专注于业务逻辑的实现。
2.1 案例展示
一个简单的Spring Boot案例是一个基本的RESTful Web服务
。开发者可以使用Spring Boot快速搭建一个RESTful服务,并且通过简单的注解配置实现各种功能,如请求映射、参数绑定、异常处理等。以下是一个简单的示例代码:
@RestController
public class HelloController {@RequestMapping("/hello")public String hello() {return "Hello, Spring Boot!";}@RequestMapping("/greet/{name}")public String greet(@PathVariable String name) {return "Hello, " + name + "!";}@RequestMapping(value = "/add", method = RequestMethod.POST)public String add(@RequestParam int num1, @RequestParam int num2) {int sum = num1 + num2;return "The sum is: " + sum;}@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return new ResponseEntity<>("An error occurred: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}
- /greet/{name}:接受一个路径参数name,并返回对该名称的问候。
- /add:接受两个参数num1和num2,并返回它们的和。
- handleException:异常处理方法,当发生异常时返回自定义错误消息和状态码。
测试RESTful Web服务: 可以使用Postman或类似工具发送HTTP请求
,并查看响应结果。以下是一些示例请求:
- GET请求 /hello:返回 “Hello, Spring Boot!”
- GET请求 /greet/John:返回 “Hello, John!”
- POST请求 /add,参数 num1=10,num2=20:返回 “The sum is: 30”
应用程序入口
最后,我们需要一个应用程序入口类来启动Spring Boot应用程序:
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
3、Spring Cloud
Spring Cloud是一个用于构建分布式系统的工具集
,它基于Spring Boot开发,提供了一系列的工具和框架,帮助开发者快速搭建分布式系统。下面我将从介绍、特点、用途、使用方法以及案例展示等多个角度详细分析Spring Cloud:
3.1 介绍
Spring Cloud是基于Spring Boot的微服务架构开发工具,它提供了一系列的工具和框架,帮助开发者快速搭建分布式系统。Spring Cloud主要包括服务发现、负载均衡、断路器、网关等组件,可以帮助开发者构建弹性、可靠、高性能的分布式系统。
3.2 特点
- 微服务架构支持:Spring Cloud提供了丰富的组件,
支持微服务架构的开发和部署
。 - 服务注册与发现:集成服务注册中心,如Eureka或Consul,
实现服务之间的自动发现和注册
。 - 负载均衡:支持负载均衡策略,通过集成
Ribbon实现客户端负载均衡
。 - 断路器:集成Hystrix实现断路器功能,提高系统的
容错性和稳定性
。 - 分布式配置管理:支持集中式的配置管理,可以
动态管理
应用程序的配置信息
。 - 网关:提供API网关,统一管理微服务的
访问入口
,实现安全验证
、流量控制
等功能。
3.3 用途
Spring Cloud主要用于构建分布式系统,适用于需要快速开发、部署和管理微服务架构的项目
。它可以帮助开发者解决微服务架构中的服务注册与发现、负载均衡、断路器、分布式配置管理等问题,提高系统的弹性和可靠性。
3.4 使用方法
- 创建Spring Cloud项目:使用Spring Initializr创建一个新的Spring Cloud项目。
- 集成服务注册中心:在项目中集成Eureka或Consul等服务注册中心,
实现服务
之间的自动发现
和注册
。 - 服务间通信:使用Feign或Ribbon进行服务间通信,实现微服务之间的调用。
- 配置断路器:配置Hystrix
实现断路器功能
,提高系统的容错性。 - 部署和测试:部署Spring Cloud项目,并进行
测试验证各个组件的功能是否正常
。
3.5 案例展示
使用Spring Cloud搭建一个基本的电子商务系统。这个示例将包括用户服务、订单服务和支付服务三个微服务,并展示它们之间的通信、负载均衡和容错处理。
示例代码:
- 用户服务(User Service):
// 用户服务接口
@RestController
public class UserController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/user/{userId}")public User getUser(@PathVariable Long userId) {// 调用订单服务获取用户的订单信息Order order = restTemplate.getForObject("http://order-service/order/{userId}", Order.class, userId);// 调用支付服务获取用户的支付信息Payment payment = restTemplate.getForObject("http://payment-service/payment/{userId}", Payment.class, userId);return new User(userId, order, payment);}
}
- 订单服务(Order Service):
// 订单服务接口
@RestController
public class OrderController {@GetMapping("/order/{userId}")public Order getOrder(@PathVariable Long userId) {// 查询数据库获取用户的订单信息return orderRepository.findByUserId(userId);}
}
- 支付服务(Payment Service):
// 支付服务接口
@RestController
public class PaymentController {@GetMapping("/payment/{userId}")public Payment getPayment(@PathVariable Long userId) {// 查询数据库获取用户的支付信息return paymentRepository.findByUserId(userId);}
}
- 主应用程序(Main Application):
@SpringBootApplication
@EnableEurekaClient
public class EcommerceApplication {public static void main(String[] args) {SpringApplication.run(EcommerceApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
在这个示例中,用户服务通过RestTemplate
调用订单服务和支付服务,实现了服务之间的通信。通过@EnableEurekaClient注解
,将服务注册到Eureka服务注册中心
,实现了服务的自动发现和负载均衡。同时,可以在需要的地方集成Hystrix
实现断路器功能,提高系统的容错性。
4、Spring Data
Spring Data是一个用于简化数据访问的工具集
,旨在帮助开发人员更轻松地与各种数据存储技术进行交互,包括关系型数据库和NoSQL数据库等。通过Spring Data,开发人员可以避免编写大量重复的数据访问代码,提高开发效率并降低出错的可能性。
4.1 介绍
Spring Data提供了多个模块,其中最常用的包括Spring Data JPA和Spring Data MongoDB。Spring Data JPA用于简化对关系型数据库的访问,而Spring Data MongoDB则用于简化对MongoDB这类文档型数据库的访问。
4.2 特点
- 简化数据访问:Spring Data通过提供Repository接口和自动生成数据访问代码,
简化
了数据访问
的过程。 - 支持多种数据存储技术:Spring Data不仅支持关系型数据库,还支持
NoSQL数据库
等多种数据存储技术。 - 提高开发效率:减少了开发人员编写重复数据访问代码的工作量,提高了开发效率。
- 提供丰富的查询功能:Spring Data提供了丰富的查询方法,开发人员可以通过方法命名规则或
@Query注解
来定义查询。
4.3 用途
Spring Data适用于需要与数据库进行交互的各种应用程序,特别是那些需要频繁进行数据读写操作的应用
。它可以帮助开发人员快速构建数据访问层,简化数据访问逻辑,提高系统的可维护性和可扩展性。
4.4 使用方法
使用Spring Data的一般步骤如下:
- 集成
Spring Data JPA
或Spring Data MongoDB
等模块到项目中。 - 定义数据实体类,
使用注解
标识实体类与数据表
的映射关系。 - 定义Repository接口,继承相应的
Spring Data Repository
接口。 - 编写数据访问逻辑,Spring Data会根据方法命名规则或
@Query注解
自动生成数据访问代码。 - 在业务逻辑中调用
Repository接口
中的方法来实现数据的增删改查操作。
4.5 案例展示
编写一个简单的博客应用并使用Spring Data JPA来管理博客文章数据时,以下是一个基本的案例展示代码,包括实体类Blog、Repository接口BlogRepository以及简单的业务逻辑代码。
1. Blog实体类
首先,我们定义一个Blog实体类,用于映射数据库中的博客文章表。假设博客文章包含id、标题title和内容content等字段。
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Blog {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String title;private String content;// 省略构造方法、getter和setter等
}
2. BlogRepository接口
接下来,定义一个BlogRepository接口,继承自Spring Data JPA的CrudRepository接口,用于对Blog实体进行数据库操作。
import org.springframework.data.repository.CrudRepository;public interface BlogRepository extends CrudRepository<Blog, Long> {// 可以在这里定义自定义的查询方法}
3. 业务逻辑代码
最后,编写业务逻辑代码,例如在一个Service类中调用BlogRepository接口的方法来实现对博客文章的增删改查操作。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class BlogService {@Autowiredprivate BlogRepository blogRepository;public Blog saveBlog(Blog blog) {return blogRepository.save(blog);}public void deleteBlog(Long id) {blogRepository.deleteById(id);}public Blog findBlogById(Long id) {return blogRepository.findById(id).orElse(null);}// 其他业务逻辑方法}
通过以上代码示例,我们可以看到如何使用Spring Data JPA来管理博客文章的数据访问。定义实体类、Repository接口以及编写业务逻辑代码,可以快速地实现对博客文章数据的增删改查操作,而不需要编写大量的数据访问代码。
5、Spring Security
Spring Security是一个用于应用程序安全的强大框架,它提供了一系列功能,包括认证、授权、加密
等,可以帮助开发人员轻松地加强应用程序的安全性。下面我将从介绍、特点、用途、使用方法以及案例展示等多个角度来详细分析Spring Security。
5.1 介绍
Spring Security是一个功能强大且高度可定制的框架,用于在Spring应用程序中提供安全性。它基于Servlet过滤器,为应用程序的URL添加了安全性,可以通过配置文件来定义安全性约束。Spring Security提供了全面的安全解决方案,包括认证、授权、攻击防护等功能。
5.2 特点
-
认证和授权:Spring Security支持多种认证方式,如基于内存、数据库、LDAP等的认证,同时提供了灵活的授权机制,可以基于
角色或权限
进行控制。 -
易于集成:Spring Security与Spring框架无缝集成,可以轻松与Spring应用程序进行整合,保护应用程序的资源。
-
安全性:Spring Security具有高度的安全性,可以防范常见的安全攻击,如
跨站脚本攻击、跨站请求伪造
等。 -
会话管理:Spring Security提供了会话管理功能,可以
控制用户会话的创建和销毁
,有效防止会话劫持等问题。
5.3 用途
Spring Security广泛应用于各种Java Web应用程序中,特别是那些对安全性要求较高的应用。它可以用于保护Web应用程序的资源,限制用户的访问权限,防止未经授权的访问等
。
5.4 使用方法
使用Spring Security通常需要以下步骤:
- 添加依赖:在项目中添加
Spring Security
的依赖
。 - 配置安全规则:配置Spring Security的安全规则,包括登录页面、权限控制等。
- 自定义认证逻辑:根据需求自定义认证逻辑,可以选择
内存认证、数据库认证
等方式。 - 集成Spring Security与Spring MVC:将Spring Security与Spring MVC集成,保护应用程序的资源。
5.5 案例展示
以下是一个简单的Spring Security案例,演示了如何配置基本的安全规则和认证逻辑:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN").antMatchers("/user/**").hasAnyRole("ADMIN", "USER").anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("admin").password("{noop}admin").roles("ADMIN").and().withUser("user").password("{noop}user").roles("USER");}
}
在这个案例中,我们配置了两个用户admin和user,分别具有ADMIN和USER角色,配置了对应的安全规则,指定了登录页面和权限控制。
总结
总的来说,Spring全家桶是Spring Framework的一系列衍生产品,旨在提供全面的解决方案来简化Java应用程序的开发
。其中,Spring Boot
致力于简化Spring应用程序的搭建和部署
,Spring Cloud
提供了构建分布式系统
的工具,Spring Data
简化了数据访问层
的开发,Spring Security
则专注于应用程序的安全性
。
通过使用Spring全家桶,开发者可以快速搭建Java应用程序,实现快速开发和部署。这些工具提供了丰富的功能和灵活的配置选项,使开发者能够根据项目需求选择合适的组件,提高开发效率和质量。同时,Spring全家桶的社区支持良好,有大量的文档和示例可供参考,帮助开发者更好地理解和使用这些工具。
综上所述,Spring全家桶为Java开发者提供了强大的工具和支持,帮助他们构建高效、可靠的Java应用程序。通过深入了解和灵活运用Spring全家桶中的各个工具,开发者可以更好地应对软件开发领域的挑战,提升自身的技术水平和竞争力。
码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。
相关文章:

Spring 全家桶使用教程
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Spark SQL性能优化高频面试题及答案
目录 高频面试题及答案1. 如何通过分区(Partitioning)优化Spark SQL查询性能?2. 什么是数据倾斜(Data Skew)?如何优化?3. 如何使用广播(Broadcast)优化Join操作ÿ…...
云原生链路观测平台 openobserve + fluent-bit,日志收集
grpc-opentracing https://github.com/grpc-ecosystem/grpc-opentracing openobserve fluent-bit 为啥会选择这个组合 一个 rust 写的一个是c写的,性能和内存方面不用担心,比java 那套好太多了 openobserve 文档 :https://openobserve.ai/…...

Android 车载应用开发指南 - CarService 详解(下)
车载应用正在改变人们的出行体验。从导航到娱乐、从安全到信息服务,车载应用的开发已成为汽车智能化发展的重要组成部分。而对于开发者来说,如何将自己的应用程序无缝集成到车载系统中,利用汽车的硬件和服务能力,是一个极具挑战性…...

【Linux网络 —— 网络基础概念】
Linux网络 —— 网络基础概念 计算机网络背景网络发展 初始协议协议分层协议分层的好处 OSI七层模型TCP/IP五层(或四层)模型 再识协议为什么要有TCP/IP协议?什么是TCP/IP协议?TCP/IP协议与操作系统的关系所以究竟什么是协议? 网络传输基本流程…...

el-form动态标题和输入值,并且最后一个输入框不校验
需求:给了固定的label,叫xx单位,要输入单位的信息,但是属性名称都一样的,UI画图也是表单的形式,所以改为动态添加的形式,实现方式也很简单,循环就完事了,连着表单校验也动…...

一,初始 MyBatis-Plus
一,初始 MyBatis-Plus 文章目录 一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.1.2 插入一条数据3.1.1.3 …...

安卓13删除下拉栏中的关机按钮版本2 android13删除下拉栏关机按钮
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。我们之前写过一个文章也是一样的删除…...
快递物流单号识别API接口代码
官网:快递鸟 API参数 一、接口描述/说明 (1)该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。 (2)接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订…...
AI时代的程序员:如何保持和提升核心竞争力
1.引言 随着AIGC(如 ChatGPT、Midjourney、Claude 等)大语言模型的快速崛起,AI辅助编程工具逐渐成为程序员工作的重要组成部分。这一转变不仅改变了工作方式,更深刻影响了程序员的职业角色和技术路径。有人担心,AI将取…...
Oracle 数据库常用命令与操作指南
Oracle 数据库是企业级系统中常用的数据库管理系统,掌握基础的命令可以让你在日常管理中更加高效。本指南将介绍几条常用的 Oracle 数据库命令,涵盖用户权限管理、修改用户密码、删除用户、以及其他日常操作。 目录 授权用户操作权限使用最高权限登录 O…...

spring boot项目对接人大金仓
先确认一下依赖 第一 是否引入了mybatis-plus多数据源,如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…...

《操作系统 - 清华大学》1 -2:操作系统概述 —— 什么是操作系统
文章目录 1. 操作系统定义2. 操作系统的位置3. 操作系统软件的分类4. 操作系统软件的组成5. 操作系统内核特征 现在来继续讲什么是操作系统,操作系统什么样的?它是一个程序,它和其他程序是什么样的关系?然后它有些什么样的组成&am…...

power bi制作各季度收入累加柱状图——日期表、calculate、datesytd
一、数据介绍: 2017-2019年订单销售收入数据(订单日期,销售收入) 二、效果展示: 三、操作步骤: 1、建立日期表 (1)建立原因 本次度量值编写需要运用到datesytd这一时间智能函数…...

OceanBase 3.X 高可用 (一)
OceanBase 3.X 高可用(一) 一、分布式核心 OceanBase 3.x 采用的是paxos 协议,与raft协议相比。其复杂程度高,实现技术难度大。 Paxos 协议允许事务日志乱序发送,顺序提交。raft允许事务顺序发送,顺序提…...
CSR、SSR、SSG
客户端渲染(Client-Side Rendering, CSR)在SEO方面存在一些不利因素,主要原因包括: 初始加载内容的缺乏:CSR依赖于JavaScript来动态生成页面内容。当搜索引擎爬虫访问一个使用CSR技术构建的网站时,它们最初…...

linux -L16-linux 查看应用占用的资源top
linux 查看应用占用的资源top Targetsteps启动 top 命令排序进程:查看特定进程:过滤进程其他常用选项交互式帮助 Target linux 查看应用占用的资源top steps 在 Linux 系统中,top 命令是一个非常有用的工具,它提供了一个实时更…...
QT——多线程操作
一、单线程和多线程的区别 单线程指的是程序在执行时只有一个流程,也就是一次只能执行一个任务。当程序中某个任务需要花费大量时间时,单线程会导致整个程序阻塞,用户体验会变差。 多线程则是指程序在执行时可以同时执行多个任务,每个任务都是一个独立的线程。多线程可以…...

理解C语言之深入理解指针(三)
目录 1. 字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么? 2.2 数组指针变量怎么初始化 3. ⼆维数组传参的本质 4. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针变量的使⽤ 4.3 两段有趣的代码 4.3.1 typedef 关键字 5. 函数指针数组 6. 转移…...

「芯片知识」MP3解码ic方案,音乐芯片在数字音频中的作用
MP3解码芯片是一种由内部晶振器组成的简单语音电路,将这种独特的MP3音乐芯片与其他零件进行接驳,便能够形成一个完整的语音集成电路。而深受顾客欢迎的MP3音乐芯片现如今已经广泛的使用在电子玩具和家用电器等众多的场合之中,它在数字音频中扮…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...