Java 十大常用框架详解
一、Spring MVC
Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架。它使用了 MVC 架构模式的思想,将 Web 层进行职责解耦,基于请求 - 响应模型,旨在简化日常 Web 开发。
本文详细介绍了 Java 生态中常用的十大框架与工具,涵盖 Spring MVC、Spring、MyBatis、Dubbo、Maven、RabbitMQ、Log4j、Ehcache、Redis、Shiro 以及设计模式。内容涉及各框架的核心概念、工作原理、优缺点分析及基本使用场景,旨在帮助开发者全面理解 Java 后端技术栈的基础架构与最佳实践。

Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架。它使用了 MVC 架构模式的思想,将 Web 层进行职责解耦,基于请求 - 响应模型,旨在简化日常 Web 开发。
Spring Web MVC 的核心是围绕 DispatcherServlet 设计的,它处理所有的 HTTP 请求和响应。
Spring 是一个开源框架,为了解决企业应用开发的复杂性而创建。
IOC(Inversion of Control,控制反转)容器具有依赖注入功能。它负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。在 Spring 中,BeanFactory 是 IOC 容器的实际代表者。应用程序无需直接在代码中 new 相关的对象,而是由 IOC 容器进行组装。
AOP(Aspect-Oriented Programming,面向切面编程)将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来。这有助于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
典型应用场景:
MyBatis 是支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架。它消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。
MyBatis 最强大的特性之一是动态语句功能,解决了手动拼接 SQL 的痛苦。
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。
Maven 是一个项目管理和构建自动化工具,广泛用于管理项目中的 jar 包依赖。
pom.xml 文件声明项目所需的库,Maven 会自动下载并管理版本冲突。<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 依赖声明 -->
</dependencies>
</project>
消息队列一般用于将一些无需即时返回且耗时的操作提取出来,进行异步处理,从而节省服务器的请求响应时间,提高系统吞吐量。
Log4j 是一个日志记录工具,用于记录应用程序的运行状态和调试信息。
分为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 或者自定义级别。
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 Cache Provider。
Redis 是一个 key-value 存储系统,支持存储的 value 类型相对更多,包括 string、list、set、zset 和 hash。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集等操作,且都是原子性的。
Apache Shiro 是 Java 的一个安全框架,旨在简化身份验证和授权。适用于 JavaSE 和 JavaEE 项目。
Subject subject = SecurityUtils.getSubject();
subject.login(token);
if (subject.isAuthenticated()) {
// 认证成功
}
虽然设计模式不算框架,但其思想对于理解框架原理至关重要。
对扩展开放,对修改关闭。程序需要进行拓展的时候,不能去修改原有的代码,而是通过新增代码来实现。
子类必须能够替换掉它们的父类。父类可以使用的方法,子类都可以使用;返回值和抛出异常也需符合规范。
针对接口编程,依赖于抽象而不依赖于具体。尽量使用合成/聚合的方式,而不是使用继承。一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online