当前位置: 首页 > article >正文

Spring:从青铜到王者,你的Java修炼手册

一、Spring家族宇宙:原来你是这样的框架(青铜段位)

1.1 Spring的"前世今生":从泡面到满汉全席
  • ​2002年的泡面哲学​​:Rod Johnson在厨房煮泡面时突然顿悟:"Java开发为什么不能像泡面一样简单?"
  • ​Spring的三大人生信条​​:
    public class SpringPhilosophy {// 信条1:别让我写XML(后来真香了)void hateXMLButLoveAnnotation() {}// 信条2:对象关系要像乐高积木@Bean // 这个注解是后来的真香产物DataSource dataSource() { return new DruidDataSource(); }// 信条3:测试要像吃巧克力般丝滑@Testvoid testShouldBeFun() {assertThat(1+1).isEqualTo(2); // 真香警告!}
    }
1.2 框架界的瑞士军刀:Spring全家桶图鉴
  • ​Spring Boot​​:自动配置就像智能马桶圈(用过就回不去)
  • ​Spring Cloud​​:微服务界的复仇者联盟
  • ​Spring Security​​:代码世界的钢铁侠盔甲
  • ​Spring Data​​:数据库操作的魔法扫帚
1.3 新手村生存指南:五分钟极速入门
@SpringBootApplication // 武林秘籍总纲注解
public class Apprentice {public static void main(String[] args) {SpringApplication.run(Apprentice.class, args); // 启动代码世界的时光机}@RestController // 这个注解能让你的类变成会说话的机器人class HelloController {@GetMapping("/hello") // 给浏览器开的传送门String hello() {return "恭喜你获得【青铜】勋章!"; }}
}

二、IoC容器:你的私人对象管家(白银段位)

2.1 XML配置:老司机的祖传秘方

<bean id="userService" class="com.example.UserService"><!-- 依赖注入就像拼乐高 --><property name="userDao" ref="userDao"/> 
</bean>
2.2 注解驱动:00后程序员的时尚穿搭
@Service // 这个标签值年薪30万
public class UserService {@Autowired // 自动装配就像点外卖private UserDao userDao;
}
2.3 Java Config:西装暴徒的配置艺术
@Configuration // 这是本武功秘籍
public class AppConfig {@Bean // 造物主模式启动public DataSource dataSource() {// 此处省略100行配置}
}

三、AOP编程:代码世界的影分身之术(黄金段位)
@Aspect // 分身术秘籍
@Component
public class LoggingAspect {@Around("execution(* com.example..*.*(..))") // 画个圈圈诅咒你public Object log(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("开始施法:" + joinPoint.getSignature());Object result = joinPoint.proceed();System.out.println("法术完成,耗时:" + (System.currentTimeMillis() - start));return result;}
}

四、Spring Boot:自动配置的黑科技(铂金段位)

4.1 自动配置的"读心术"原理
  • ​依赖雷达系统​​:就像智能马桶能自动加热座圈,Spring Boot通过spring.factories扫描所有jar包的配置清单
  • ​条件注解三件套​​:
    @ConditionalOnClass(DataSource.class) // 检测到数据库驱动才启动
    @ConditionalOnMissingBean             // 用户没自定义时补位
    @ConditionalOnProperty("db.enabled")  // 配置文件开关控制
  • ​自动配置彩蛋​​:在IDEA中双击Shift搜索*AutoConfiguration,能看到所有隐藏配置类
4.2 自定义Starter实战
// 手写智能空调starter
@Configuration
@AutoConfigureAfter(TemperatureAutoConfiguration.class)
public class AirConditionerAutoConfig {@Bean@ConditionalOnMissingBeanpublic AirConditioner myAC(Environment env) {int temp = env.getProperty("ac.temp", Integer.class, 26);return new GreeAirConditioner(temp); // 默认使用格力空调}
}
// 在resources/META-INF中创建spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.AirConditionerAutoConfig
4.3 配置覆盖的"千层套路"
  • ​优先级金字塔​​:命令行参数 > 系统环境变量 > application.properties > 默认配置
  • ​花式配置法​​:
    # 给自动配置的DataSource换血
    spring.datasource.url=jdbc:mysql://localhost:3306/cool_db
    spring.datasource.hikari.maximum-pool-size=20
  • ​Debug秘籍​​:启动时添加--debug参数,查看生效的自动配置报告

五、事务管理:数据库操作的保险柜(钻石段位)

5.1 事务传播的"社交礼仪"
  • ​七大传播行为​​:
    @Transactional(propagation = Propagation.REQUIRED) // 默认:有则加入,无则新建
    @Transactional(propagation = Propagation.REQUIRES_NEW) // 独立新事务
    @Transactional(propagation = Propagation.NESTED)   // 嵌套事务(像套娃)
  • ​经典翻车现场​​:在同一个类中调用@Transactional方法会导致事务失效
5.2 隔离级别的"平行宇宙"
  • ​四大结界​​:
    @Transactional(isolation = Isolation.READ_COMMITTED) // 避免脏读
    @Transactional(isolation = Isolation.SERIALIZABLE)    // 完全串行(性能杀手)
  • ​幻读克星​​:使用@Version实现乐观锁控制
5.3 分布式事务的"量子纠缠"
// 使用Seata实现跨服务事务
@GlobalTransactional
public void crossServiceOrder() {accountService.deduct();  // 扣款storageService.reduce();  // 减库存orderService.create();    // 创建订单
}
// 异常时自动触发全局回滚

六、响应式编程:未来世界的入场券(王者段位)

6.1 Reactor核反应堆
  • ​两大核心​​:
    Flux.just("Java", "Go", "Rust")       // 多值流.delayElements(Duration.ofSeconds(1)).subscribe(System.out::println);Mono.just("单身狗")                    // 单值流.map(str -> str + "的春天").subscribe();
  • ​背压黑科技​​:通过onBackpressureBuffer()实现流量控制
6.2 WebFlux性能狂飙
// 响应式REST接口
@RestController
public class ReactiveController {@GetMapping("/flux")public Flux<String> streamData() {return Flux.interval(Duration.ofMillis(100)).map(i -> "实时数据包:" + i);}
}
// 对比传统接口TPS提升300%
6.3 响应式数据库连接
// 使用R2DBC操作MySQL
@Autowired
private DatabaseClient client;public Flux<User> findUsers() {return client.sql("SELECT * FROM users").map(row -> new User(row.get("name", String.class),row.get("age", Integer.class))).all();
}
// 全程无阻塞IO

相关文章:

Spring:从青铜到王者,你的Java修炼手册

一、Spring家族宇宙&#xff1a;原来你是这样的框架&#xff08;青铜段位&#xff09; 1.1 Spring的"前世今生"&#xff1a;从泡面到满汉全席 ​​2002年的泡面哲学​​&#xff1a;Rod Johnson在厨房煮泡面时突然顿悟&#xff1a;"Java开发为什么不能像泡面一…...

React和原生事件的区别

一、核心差异对比表 维度原生事件React 事件绑定语法HTML 属性&#xff08;onclick&#xff09;或 DOM API&#xff08;addEventListener&#xff09;JSX 中使用驼峰式属性&#xff08;onClick&#xff09;绑定位置直接绑定到具体 DOM 元素统一委托到根节点&#xff08;React …...

Qt creator 设计页面控件认识与了解

记录一下 Qt 中的认识与了解&#xff1a; 在 Qt 中&#xff0c;这些功能属于 Qt Designer 的组件过滤系统&#xff0c;旨在帮助开发者在对象浏览器中快速定位和使用不同类型的控件和组件。以下是每个功能的详细讲解&#xff1a; ‌Layouts&#xff08;布局&#xff09;‌&…...

命象架构法 02|你的系统有“用神”吗?

命理中说:“八字无用神,是虚命。” 系统架构中说:“模块无主线,是垃圾桶。” 你设计了无数类,却不知道哪个是核心。 那么你的系统,很可能是没有“用神”的。 01|什么是“用神”?不是你以为的“最好” 命理中,“用神”不是“最强的”,而是对命主最有帮助的。 比如一…...

NVIDIA Mellanox BlueField-2 DPU(Data Processing Unit)智能网卡的调试和使用

专有名词 OOB&#xff1a; BMC&#xff1a; BFB&#xff1a; EMMC&#xff1a; 关键词解释eMMCEmbedded Multi-Media Card——把 NAND 闪存颗粒与控制器封装在一起的板载存储件&#xff0c;类似手机里的“内置储存” .deb&#xff1a;文件是​​Debian软件包格式​​的专…...

Tomcat- AJP协议文件读取/命令执行漏洞(幽灵猫复现)详细步骤

一、漏洞描述 Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器.默认情况下,Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互.但Apache Tomcat在AJP协议的实现上存在漏洞,导致攻击者可以通过发送恶意的AJP请求,可以读取或者包含Web应…...

B1、进度汇报(— 25/05/31)

本文档汇总了各成员在 2025 年 5 月 11 日 ~ 5 月 31 日完成的工作。我们遇到了进度问题&#xff08;收工后需反思&#xff09;&#xff1a; 本学期第十四周&#xff08;05/19 ~ 05/25&#xff09;有相当多课程需要提交实验结果或上台展示。本学期第十六周&#xff08;06/02 ~…...

工作流引擎-11-开源 BPM 项目 jbpm

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#xff0c;支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…...

【Prompt Engineering】摸索出的一些小套路

prompt 优化方法 &#x1f539; 1. 通用结构模板 模块化的Prompt&#xff1a;Prompt 划分成边界清晰的模块&#xff0c;不同模块间都应有明确的分隔符 以下是通用 Prompt 的推荐结构&#xff1a; [角色设定] [任务描述] [输出格式要求] [补充上下文]角色设定&#xff1a;…...

CSS强制div单行显示不换行

在CSS中&#xff0c;要让<div>的内容强制单行显示且不换行&#xff0c;可通过以下属性组合实现&#xff1a; 核心解决方案&#xff1a; css 复制 下载 div {white-space: nowrap; /* 禁止文本换行 */overflow: hidden; /* 隐藏溢出内容 */text-overflow: e…...

js的时间循环的讲解

JavaScript 事件循环(Event Loop)是其运行时的核心机制,负责处理异步操作,确保单线程的 JavaScript 能够高效地处理并发任务。下面从多个角度详细解析事件循环机制: 1. 核心概念 (1)执行栈(Call Stack) 定义:JavaScript 是单线程的,所有同步任务都在执行栈中依次执…...

Flutter实现不规则瀑布流布局拖拽重排序

因为业务&#xff0c;所以需要用flutter去实现一种不规则图形的瀑布流&#xff0c;但是同时需要支持拖拽并重新排序。效果类似如下。 查询过现有的插件&#xff0c;要么是仅支持同样大小的组件进行排序&#xff0c;要么就是动画效果不是很满意&#xff0c;有点死板&#xff0c;…...

【第4章 图像与视频】4.1 图像的绘制

文章目录 前言在 Canvas 之中绘制图像drawImage() 方法的用法 前言 drawImage() 方法可以将一幅图像的整体或某个部分绘制到 canvas 内的任何位置上&#xff0c;并且允许开发者在绘制过程中对图像进行缩放。也可以将图像绘制在离屏 canvas 中&#xff0c;这样的话就可以对图像…...

苹果应用开发详细教程(2025最新版)

苹果应用开发详细教程(2025最新版) 第一阶段:开发环境搭建 硬件准备 Mac电脑(macOS Monterey 12或更高版本)iPhone/iPad(真机调试建议iOS 16+)软件安装 # 通过App Store安装Xcode xcode-select --installXcode 15+(包含Swift 5.9编译器)安装CocoaPods(依赖管理工具)…...

G25-05-31Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-05-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Pake: 利用 Rust 轻松构建轻量级多端桌面应用 创建周期:491 天开发语言:Rust协议类型:MIT LicenseStar数量:2095…...

2025年主流编程语言全面分析与学习指南

文章目录 2025年主流编程语言全面分析与学习指南目录简介Python优势局限性学习路径适合人群 JavaScript优势局限性学习路径适合人群 Java优势局限性学习路径适合人群 C优势局限性学习路径适合人群 Rust优势局限性学习路径适合人群 Swift优势局限性学习路径适合人群 Go优势局限性…...

window安装nginx

步骤1&#xff1a;下载Nginx for Windows​ 访问Nginx官网下载页面&#xff1a;https://nginx.org/en/download.html 在​​Stable version​​&#xff08;稳定版&#xff09;下找到Windows版本&#xff0c;点击下载.zip文件&#xff08;如 nginx-1.28.0.zip&#xff09; 步…...

ArcGIS Pro裁剪影像

方法1&#xff1a; 工具箱中&#xff0c;数据管理工具-栅格-栅格处理-裁剪栅格 注意&#xff1a;勾选上使用输入要素裁剪几何 方法2&#xff1a; 按掩膜提取工具裁剪栅格&#xff1a;在工具箱中&#xff0c;Spatial Analyst工具-提取分析-按掩膜提取...

[智能算法]蚁群算法原理与TSP问题示例

目录 ​编辑 一、生物行为启发的智能优化算法 1.1 自然界的群体智能现象 1.2 人工蚁群算法核心思想 二、算法在组合优化中的应用演进 2.1 经典TSP问题建模 2.2 算法流程优化 三、TSP问题实战:Python实现与可视化 3.1 算法核心类设计 3.2 参数敏感性实验 3.3 可视化…...

Vue-4-前端框架Vue基础入门之Vue的常用操作

文章目录 1 VUE1.1 文件结构1.2 定义和显示变量1.2.1 ref函数1.2.2 reactive函数1.3 定义方法1.3.1 方式一1.3.2 方式二1.3.3 方式三1.4 循环遍历1.5 watch1.5.1 监听ref1.5.2 监听reactive1.6 生命周期函数1.7 配置文件2 问题及解决2.1 lack permissions2.2 npm run dev! Miss…...

ubuntu国内镜像源手动配置

备份当前源列表 打开终端&#xff0c;执行以下命令备份当前的源列表&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 编辑源列表文件 使用文本编辑器编辑/etc/apt/sources.list文件&#xff0c;例如使用nano&#xff1a; sudo vim /etc/apt/sou…...

21-CS61B-lab6:java文件操作以及持久化一见

文件操作 这里的文件操作主要通过File类&#xff0c;Serializable的派生类等实现 拥有路径path(相对路径/绝对路径)&#xff0c;创建File对象 File newFile new File(path); 获得当前工作目录File File CWD new File(System.getProperty("user.dir")); 通过S…...

⚡️ Linux 系统安装与配置 Git

⚡️ Linux 系统安装与配置 Git &#x1f4d8; 1. Git 简介 Git 是目前世界上最流行的分布式版本控制系统&#xff0c;他能高效地处理从小型到大型项目的版本管理需求&#xff0c;是现代软件开发流程中的核心工具之一。 在企业环境中&#xff0c;大多数公司通常会在 Linux 服…...

SpringBoot 自动装配原理深度解析:从源码到实践

SpringBoot 自动装配原理深度解析&#xff1a;从源码到实践 SpringBoot 作为现代 Java 开发的事实标准&#xff0c;其核心优势之一是 “约定大于配置” 的自动装配机制。本文将从源码层面深入解析 SpringBoot 自动装配的实现原理&#xff0c;并通过代码示例展示其工作流程。 …...

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…...

Nginx Lua模块(OpenResty)实战:动态化、智能化你的Nginx,实现复杂Web逻辑 (2025)

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位Nginx的“铁杆粉丝”和“配置大师”们&#xff01;咱们都知道&#xff0c;Nginx以其超凡的性能、稳定性和丰富的模块化功能&#xff0c;在Web服务器、反向代理、负载均衡等领域独步青云&#xff0c;简直是服务器软…...

openssl 怎么生成吊销列表

mkdir test cd test # 根据 /usr/lib/ssl/openssl.cnf 配置文件中目录结构可知有个demoCA目录&#xff0c;目录下有各种文件。 mkdir ./demoCA ./demoCA/newcerts ./demoCA/private sudo chmod 777 -R ./demoCA/ echo 01 > ./demoCA/serial touch ./demoCA/index.txt # /usr…...

Go语言包的组织与导入 -《Go语言实战指南》

在 Go 语言中&#xff0c;包&#xff08;Package&#xff09; 是管理代码模块化、复用性与可维护性的核心单位。本章将讲解如何组织包结构、如何导入其他包、以及项目中的最佳实践。 一、什么是包&#xff1f; • 每个 .go 文件都属于某个包&#xff08;通过 package 声明&…...

springboot-响应接收与ioc容器控制反转、Di依赖注入

1.想将服务器中的数据返回给客户端&#xff0c;需要在controller类上加注解&#xff1a;ResponseBody; 这个注解其实在前面已经使用过&#xff0c;RestController其实就包含两个注解&#xff1a; Controller ResponseBody 返回值如果是实体对象/集合&#xff0c;将会转换为j…...

CSP使用严格设置

文章目录 说明示例 说明 日期&#xff1a;2025年6月2日。 内容安全政策&#xff08;MPS&#xff09;是一个额外的安全层&#xff0c;有助于检测和缓解某些类型的攻击。包括&#xff08;但不限于&#xff09;跨站点脚本&#xff08;XSS&#xff09;和数据注入攻击。这些攻击用…...