一、Web 开发框架:构建应用的基础骨架
1. Spring Boot—— 微服务开发的 "万能钥匙"
基础介绍:
Spring Boot 是基于 Spring 的快速开发框架,通过 "自动配置" 机制大幅减少样板代码,让开发者专注业务逻辑。2025 年仍是企业级开发的首选,全球 90% 以上的 Java 微服务项目基于此构建。
核心功能拆解:
自动配置(Auto-Configuration):
通过@ConfigurationProperties和@Conditional注解,根据类路径中的依赖自动配置 Bean。例如,引入spring-boot-starter-web会自动配置 Tomcat 服务器和 Spring MVC 组件。生产级特性:
内置健康检查(/actuator/health)、指标监控(/actuator/metrics)和外部配置(application.yml),无需额外集成。快速启动:
直接打包为可执行 JAR,通过java -jar启动,避免传统 WAR 包部署到 Tomcat 的繁琐流程。
代码实战(RESTful 接口开发):
// 启动类(自动扫描@SpringBootApplication下的组件)
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
// 控制器(处理HTTP请求)
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
// GET请求:查询用户列表
@GetMapping
public List
return userService.getAll();
}
// POST请求:创建用户
@PostMapping
public User create(@RequestBody User user) {
return userService.save(user);
}
}
// 服务层(业务逻辑)
@Service
public class UserService {
@Autowired
private UserRepository repository;
public List
return repository.findAll();
}
public User save(User user) {
// 业务校验、数据处理...
return repository.save(user);
}
}
适用场景:
企业级微服务架构(如电商平台、金融系统)快速原型开发(3 天内完成单服务 MVP)与云平台集成(AWS、阿里云的 Spring Boot 官方镜像)
2. Spring MVC—— 经典 Web 层的 "瑞士军刀"
与 Spring Boot 的关系:
Spring MVC 是 Spring 框架的 Web 层模块,Spring Boot 对其进行了自动化封装。例如,Spring Boot 的@RestController本质是@Controller+@ResponseBody的组合注解。
核心原理:
MVC 架构:
Model:数据模型(如 User 类)View:视图渲染(如 Thymeleaf、JSP)Controller:请求处理(如UserController)
请求处理流程:
DispatcherServlet接收请求HandlerMapping匹配控制器HandlerAdapter调用方法ViewResolver渲染视图
代码对比(Spring MVC 原生 vs Spring Boot):
// Spring MVC原生配置(需手动配置DispatcherServlet)
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
}
// Spring Boot中自动配置(无需手动配置)
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello Spring MVC!";
}
}
二、微服务框架:构建分布式系统的 "乐高积木"
1. Spring Cloud—— 微服务生态的 "航空母舰"
核心组件详解:
服务注册与发现(Nacos/Eureka):
服务启动时自动注册到注册中心,其他服务通过名称调用,无需硬编码 IP。例如:
java
// 服务注册(Nacos示例)
@Service
@RegisterForDiscovery // 标记服务可被发现
public class OrderService {
// 通过Feign调用商品服务
@Autowired
private ProductFeignClient productClient;
public Product getProductInfo(Long id) {
return productClient.get(id);
}
}
服务网关(Spring Cloud Gateway):
统一入口处理请求路由、认证、限流,替代传统 Nginx+Lua 方案:
yaml
# 网关配置(路由到商品服务)
spring:
cloud:
gateway:
routes:
- id: product-service
uri: lb://product-service
predicates:
- Path=/api/products/**
熔断限流(Sentinel):
防止服务雪崩,例如对下单接口设置 QPS 限流:
java
@Service
public class OrderService {
public void createOrder(Order order) {
// 定义资源名
String resource = "createOrder";
try (Entry entry = SphU.entry(resource, EntryType.IN, 100)) { // QPS限流100
// 正常业务逻辑
orderMapper.insert(order);
} catch (BlockException e) {
// 限流处理
throw new ServiceException("下单太频繁,请稍后再试");
}
}
}
适用场景:
大型分布式系统(如日活千万的电商平台)多服务协作场景(订单、商品、库存服务解耦)
2. Micronaut—— 轻量级微服务的 "闪电侠"
核心优势:
启动速度极快:编译时处理注解,启动时间 < 100ms(Spring Boot 约 1-3 秒)低内存占用:单个服务内存占用 < 100MB,适合 Serverless 场景函数式编程支持:
java
// Micronaut函数式API示例
@FunctionBean("userFunction")
public HttpResponse
User user = request.body();
// 处理用户数据
return HttpResponse.created(user);
}
三、数据访问框架:连接应用与数据库的 "桥梁"
1. MyBatis—— 灵活操控 SQL 的 "瑞士军刀"
核心特性对比:
特性MyBatisHibernateSQL 控制手动编写自动生成性能高中学习成本低高适合场景复杂 SQL简单 CRUD
动态 SQL 实战(多条件查询):
SELECT id, name, age, email FROM users
AND name LIKE CONCAT('%', #{name}, '%')
AND age = #{age}
AND email LIKE CONCAT('%', #{email}, '%')
${sortField} ${sortOrder}
// 调用方式
List
UserQuery.builder()
.name("张")
.age(25)
.sortField("create_time")
.sortOrder("DESC")
.build()
);
2. Spring Data JPA—— 极简 CRUD 的 "魔法棒"
声明式查询示例:
// 实体类(JPA注解)
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_name", length = 50)
private String name;
@Column
private int age;
@Email // 字段校验
private String email;
// getter/setter...
}
// 数据访问接口(方法名即查询逻辑)
public interface UserRepository extends JpaRepository
// 按名称模糊查询
List
// 按年龄范围查询
List
// 自定义SQL查询
@Query("SELECT u FROM User u WHERE u.email LIKE %?1")
List
}
四、响应式编程框架:应对高并发的 "新武器"
1. Spring WebFlux—— 异步非阻塞的 "发动机"
核心原理:
基于 Reactor 框架,采用事件循环(Event Loop)模型,单线程处理数千连接支持背压(Backpressure),避免下游处理不及时导致内存溢出
代码示例(响应式 API):
@RestController
@RequestMapping("/reactive/products")
public class ProductController {
@Autowired
private ProductRepository repository;
// 返回Flux流(支持海量数据分页)
@GetMapping
public Flux
return repository.findAll();
}
// 返回Mono单值(异步获取单个对象)
@GetMapping("/{id}")
public Mono
return repository.findById(id)
.switchIfEmpty(Mono.error(new ProductNotFoundException(id)));
}
// 异步创建(返回创建后的对象)
@PostMapping
public Mono
return productMono.flatMap(repository::save);
}
}
五、测试框架:保障代码质量的 "守护者"
1. JUnit 5—— 现代化测试的 "标准尺"
三大模块解析:
JUnit Platform:测试运行平台,支持不同测试框架(JUnit、TestNG)JUnit Jupiter:新编程模型,包含@Test、@ParameterizedTest等注解JUnit Vintage:兼容 JUnit 4 测试用例
参数化测试实战:
// 计算器测试类
class CalculatorTest {
private Calculator calculator = new Calculator();
// 普通测试
@Test
void add_shouldReturnCorrectValue() {
int result = calculator.add(2, 3);
assertEquals(5, result);
}
// 参数化测试(多种输入场景)
@ParameterizedTest
@CsvSource({
"2, 3, 5",
"0, 0, 0",
"-1, 1, 0"
})
void add_withDifferentParams_shouldReturnCorrectValue(int a, int b, int expected) {
int result = calculator.add(a, b);
assertEquals(expected, result);
}
// 动态测试(动态生成多个测试用例)
@TestFactory
Stream
return Arrays.asList(2, 4, 6, 8)
.stream()
.map(num -> DynamicTest.dynamicTest(
"isEven(" + num + ")",
() -> assertTrue(calculator.isEven(num))
));
}
}
六、框架对比与选型指南
1. Web 框架选型表
框架学习成本性能适合场景代表项目Spring Boot低中企业微服务、快速开发电商平台、OA 系统Micronaut中高云原生、Serverless实时数据处理、IoT 后端Quarkus中极高Kubernetes 原生应用金融交易系统、高并发 API
2. 数据访问框架对比
选 MyBatis:
需求中存在复杂 SQL(如多表联查、动态条件)对 SQL 性能要求极高(需手写执行计划)兼容老系统数据库(如 Oracle、DB2)
选 Spring Data JPA:
业务以简单 CRUD 为主使用 MySQL 等主流关系型数据库追求开发效率(代码量比 MyBatis 少 50%)
七、学习资源与进阶路径
入门阶段(1-3 个月):
必学:Spring Boot 官方文档 + MyBatis 官方教程实战:仿 B 站视频管理系统(单服务架构)
进阶阶段(3-6 个月):
必学:Spring Cloud Alibaba 实战 + JUnit 5 单元测试实战:分布式电商平台(订单、商品、用户服务拆分)
高级阶段(6 个月 +):
必学:Micronaut 响应式编程 + 框架源码分析(如 Spring Boot 自动配置原理)实战:高并发秒杀系统(结合 Sentinel 限流 + Redis 缓存)
结语
Java 框架的选择本质是 "场景驱动" 的决策:企业级复杂业务首选 Spring 生态,云原生场景优先考虑 Micronaut/Quarkus,而性能敏感型系统可深入研究 Reactor 响应式编程。建议开发者先精通 1-2 个核心框架(如 Spring Boot+MyBatis),再根据业务需求扩展技术栈,避免陷入 "框架选型焦虑"。