全文目录:
- 开篇语
- 前言:为什么要学框架?
- 一、Spring Framework:Java 框架的基石
- 1.1 Spring 解决了什么问题?
- 1.2 Spring 的核心模块
- 二、Spring Boot:让开发回归简单
- 2.1 Spring Boot 的核心理念:约定优于配置
- 2.2 自动装配原理(重点!)
- 三、MyBatis 与 MyBatis-Plus:数据持久层的利器
- 3.1 为什么不直接用 JDBC?
- 3.2 MyBatis 的定位
- 3.3 MyBatis-Plus 的增强
- 四、Spring Cloud:迈向微服务架构
- 4.1 微服务的核心挑战
- 4.2 主流组件概览
- 4.3 一个务实的建议
- 五、其他值得关注的框架
- 5.1 Netty:高性能网络编程框架
- 5.2 Quartz / XXL-Job:任务调度
- 5.3 ShardingSphere:分库分表中间件
- 六、学习路径建议
- 结语
- 文末
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言:为什么要学框架?
很多初学者在掌握 Java 基础语法之后,往往会陷入一种迷茫——“我已经会写类、会用集合、也懂了多线程,但我还是不知道怎么做一个真正的项目。”
这个问题的答案,就是框架。
框架(Framework)本质上是一套经过高度抽象、反复验证的代码骨架。它把开发中最繁琐、最重复的部分封装起来,让你把精力集中在真正有价值的业务逻辑上。学好框架,不是在走捷径,而是在站在前人的肩膀上,以更高的视角来思考和构建系统。
本篇文章将系统梳理 Java 生态中最核心的几类框架,带你理解它们解决的是什么问题、核心机制是什么、以及在实际项目中该如何做选型。
一、Spring Framework:Java 框架的基石
如果你只能学一个 Java 框架,那毫无疑问是 Spring。它诞生于 2003 年,至今仍然是 Java 后端开发的绝对主流。
1.1 Spring 解决了什么问题?
在 Spring 出现之前,Java EE(当时叫 J2EE)的开发极为复杂。一个简单的功能,需要写大量的 XML 配置和样板代码,对象之间的依赖关系全靠手动new,代码耦合度极高,维护起来苦不堪言。
Spring 的出现,核心带来了两个革命性的概念:
IoC(控制反转 / Inversion of Control)
传统方式是你主动new一个对象:
UserServiceuserService=newUserServiceImpl();IoC 把这个控制权交给了容器。你只需要声明"我需要一个 UserService",Spring 容器负责创建和注入:
@ServicepublicclassOrderService{@AutowiredprivateUserServiceuserService;// Spring 自动注入}对象的创建和生命周期由容器统一管理,代码的耦合度大幅降低。
AOP(面向切面编程 / Aspect-Oriented Programming)
系统中有很多横切关注点(Cross-Cutting Concerns),比如日志记录、权限校验、事务管理。这些逻辑如果散落在每个业务方法里,代码会变得混乱不堪。
AOP 的思想是把这些横切逻辑从业务代码中剥离出来,定义成"切面",在方法执行前后动态织入,业务代码完全无感知:
@Aspect@ComponentpublicclassLoggingAspect{@Around("execution(* com.example.service.*.*(..))")publicObjectlogExecutionTime(ProceedingJoinPointjoinPoint)throwsThrowable{longstart=System.currentTimeMillis();Objectresult=joinPoint.proceed();longduration=System.currentTimeMillis()-start;System.out.println(joinPoint.getSignature()+" 执行耗时: "+duration+"ms");returnresult;}}Spring 的事务管理@Transactional本质上就是一个 AOP 切面。理解了这一点,很多"玄学"问题(比如事务失效)就自然迎刃而解了。
1.2 Spring 的核心模块
Spring 并不是一个单一的框架,而是一个模块化的生态系统:
| 模块 | 作用 |
|---|---|
| Spring Core | IoC 容器、Bean 管理,是一切的基础 |
| Spring AOP | 面向切面编程支持 |
| Spring MVC | Web 层的 MVC 框架 |
| Spring Data | 数据访问层的统一抽象 |
| Spring Security | 认证与授权 |
| Spring TX | 事务管理 |
二、Spring Boot:让开发回归简单
Spring 本身非常强大,但配置繁琐是它长期被诟病的问题——一堆 XML 或 Java Config,光是把项目跑起来就要折腾半天。
Spring Boot 在 2014 年横空出世,彻底改变了这个局面。
2.1 Spring Boot 的核心理念:约定优于配置
Spring Boot 的哲学是:大多数项目的配置都是相似的,那就把这些"最佳实践"作为默认配置内置进去,你不需要配置就能运行,只有在需要定制的时候才去覆盖默认行为。
创建一个 Web 项目,以前需要配置 Tomcat、DispatcherServlet、各种 Bean……现在:
@SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}就这几行代码,一个内嵌 Tomcat 的 Web 应用就启动了。
2.2 自动装配原理(重点!)
这是面试的高频考点,也是真正理解 Spring Boot 的关键。
@SpringBootApplication注解本质上是三个注解的组合,其中@EnableAutoConfiguration会触发自动装配机制。
它的工作流程是:
- 扫描类路径下所有 jar 包中的
META-INF/spring.factories(Spring Boot 2.x)或META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 3.x)文件 - 读取其中配置的所有
AutoConfiguration类 - 通过
@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,判断当前环境是否满足条件 - 满足条件的配置类才会真正生效,向容器注册对应的 Bean
理解了这个机制,你就能看懂为什么引入一个spring-boot-starter-web依赖,HTTP 服务就自动好了——因为相关的 AutoConfiguration 已经帮你把一切都配好了。
三、MyBatis 与 MyBatis-Plus:数据持久层的利器
Web 后端开发绕不开数据库操作,这就引出了持久层框架的话题。
3.1 为什么不直接用 JDBC?
原生 JDBC 代码冗长且容易出错:获取连接、创建 Statement、处理 ResultSet、关闭资源……每个操作都需要一大堆样板代码。更麻烦的是 SQL 和 Java 代码混在一起,可读性极差。
3.2 MyBatis 的定位
MyBatis 是一个半 ORM 框架。它的核心理念是:SQL 由开发者自己掌控,框架负责处理参数映射和结果映射。
<!-- UserMapper.xml --><selectid="findUserById"resultType="User">SELECT id, username, email FROM user WHERE id = #{id}</select>@MapperpublicinterfaceUserMapper{UserfindUserById(Longid);}MyBatis 的优势在于 SQL 完全透明,对于复杂查询、性能调优非常友好。缺点是单表 CRUD 要写大量重复的 XML,开发效率偏低。
3.3 MyBatis-Plus 的增强
MyBatis-Plus(简称 MP)是在 MyBatis 基础上的增强工具,它的口号是"只做增强不做改变"。
它内置了通用的BaseMapper,单表操作一行代码不用写:
@MapperpublicinterfaceUserMapperextendsBaseMapper<User>{// 啥都不用写,insert/delete/update/select 全有了}// 链式查询,语义清晰List<User>users=userMapper.selectList(newLambdaQueryWrapper<User>().eq(User::getStatus,1).ge(User::getAge,18).orderByDesc(User::getCreateTime));对于大多数业务系统来说,MyBatis-Plus 是当前最务实的持久层选择。
四、Spring Cloud:迈向微服务架构
当单体应用的规模越来越大,团队越来越多,单体架构的弊端就开始显现——部署风险高、模块耦合严重、技术栈被锁死。微服务架构应运而生。
Spring Cloud 是构建微服务架构的全家桶解决方案,它在 Spring Boot 的基础上,整合了微服务场景下所需的各种组件。
4.1 微服务的核心挑战
拆分成多个服务之后,随之而来的是一系列新问题:
- 服务实例那么多,怎么知道谁在哪里?→服务注册与发现
- 服务之间如何调用?→远程调用 / 负载均衡
- 一个请求链路经过多个服务,出了问题怎么排查?→链路追踪
- 某个服务挂了,怎么防止故障蔓延?→熔断与限流
- 所有服务的配置怎么统一管理?→配置中心
Spring Cloud 针对这些问题提供了配套组件。
4.2 主流组件概览
Nacos(推荐):阿里开源,同时承担服务注册中心和配置中心两个角色,是目前国内使用最广泛的选择,相比老牌的 Eureka + Config Server 组合,运维成本更低。
OpenFeign:声明式 HTTP 客户端,服务间调用像调本地方法一样简单:
@FeignClient(name="order-service")publicinterfaceOrderClient{@GetMapping("/orders/{userId}")List<Order>getOrdersByUserId(@PathVariableLonguserId);}Sentinel:阿里开源的流量控制、熔断降级组件。当下游服务响应变慢或出错,Sentinel 可以自动熔断,返回降级结果,防止雪崩效应。
Gateway:Spring Cloud Gateway 作为 API 网关,负责统一入口、路由转发、权限校验、限流等,是整个微服务集群对外的门面。
4.3 一个务实的建议
微服务不是银弹。小团队、业务规模不大的项目盲目上微服务,只会带来巨大的运维负担。单体应用模块化做好了,照样能支撑相当大的业务量。架构选型要结合团队规模、业务阶段和技术能力综合判断,而不是追风口。
五、其他值得关注的框架
5.1 Netty:高性能网络编程框架
如果你需要做 RPC 框架、IM 系统、游戏服务器等对网络性能极为敏感的场景,Netty 是绕不开的。它基于 NIO 的异步事件驱动模型,能用少量线程处理大量并发连接。Dubbo、gRPC-Java 等底层都用到了 Netty。
5.2 Quartz / XXL-Job:任务调度
业务中常有定时任务的需求,比如每天凌晨跑对账、定期清理过期数据。Quartz 是经典的单机调度框架,而 XXL-Job 是国内广泛使用的分布式任务调度平台,支持任务的可视化管理、分片执行、失败告警,更适合生产环境。
5.3 ShardingSphere:分库分表中间件
当单表数据量到达亿级,数据库性能瓶颈就来了。ShardingSphere 提供了透明化的分库分表能力,业务代码几乎不需要改动,框架在 JDBC 层做了拦截和路由。
六、学习路径建议
理解了这些框架之后,一个务实的学习顺序应该是这样的:
Java 基础 → Spring Core(IoC/AOP)→ Spring MVC → Spring Boot → MyBatis / MyBatis-Plus → Spring Security → Redis 集成 → 消息队列(RabbitMQ / Kafka) → Spring Cloud 微服务体系每一步都要动手写代码,不要只看不练。把每个阶段的核心特性用小项目跑通,比刷十遍教程视频管用得多。
框架的配置和 API 可以查文档,但对核心机制的理解——比如 Spring 的 Bean 生命周期、MyBatis 的动态代理原理、Spring Boot 的自动装配流程——这些才是真正拉开差距的地方,也是面试中区分候选人深度的核心考察点。
结语
框架学习的本质,是在学习前人面对复杂问题时总结出来的设计智慧。你不只是在学怎么用@Autowired,你是在学"当对象依赖关系复杂时,如何通过控制反转来解耦";你不只是在学怎么配@Transactional,你是在学"如何用 AOP 把横切关注点从业务中剥离"。
带着这种理解去学框架,你会发现它不再是一堆需要死记硬背的注解和配置,而是一套有内在逻辑、彼此呼应的设计体系。
加油,这条路走通了,视野会完全不一样。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!