前端学习之后端小白java的一些理论知识(框架)

一、Spring Framework 和 Spring boot的区别

  1. 核心定位
  • Spring Framework:一个全面的Java应用开发框架,提供核心功能如IoC容器、AOP等
  • Spring Boot:Spring Framework的扩展,专注于简化Spring应用的初始搭建和开发过程
  1. 配置方式
  • Spring Framework:需要大量XML配置或Java注解配置
  • Spring Boot:采用"约定优于配置",自动配置大部分组件,极少配置即可运行
  1. 应用部署
  • Spring Framework:通常需要外部应用服务器(如Tomcat、Jetty)
  • Spring Boot:内嵌应用服务器,可直接生成独立可执行的JAR文件
  1. 开发速度
  • Spring Framework:搭建项目需要手动配置各种依赖和设置
  • Spring Boot:使用starter依赖和自动配置,快速启动项目
  1. 依赖管理
  • Spring Framework:需要手动管理依赖版本兼容性
  • Spring Boot:提供依赖管理,自动处理依赖版本兼容问题
  1. 监控和管理
  • Spring Framework:需要额外配置监控工具
  • Spring Boot:内置Actuator提供监控和管理功能
  1. 使用场景
  • Spring Framework:适合需要精细控制每个组件的大型复杂项目
  • Spring Boot:适合快速开发、微服务架构和云原生应用
  1. 适用场景
  • Spring Boot更适合:
    快速开发和原型设计
    微服务架构
    云原生应用
    初学者和中小型项目
    需要快速部署的场景
  • Spring Framework更适合:
    需要精细控制框架配置的大型项目
    对系统资源要求严格的场景
    需要与遗留系统深度集成的项目
    特殊的定制化需求

本质上,Spring Boot是在Spring Framework基础上的一层封装,简化了开发流程,让开发者可以更专注于业务逻辑而非框架配置。

总体而言,Spring Boot是Spring Framework的进化版,简化了开发流程,但两者并非替代关系。Spring Boot构建在Spring Framework之上,根据项目需求和团队经验选择合适的方案更为重要。

二、java 有哪些框架

  1. Web开发框架
    Spring Framework:最流行的企业级开发框架
    Spring Boot:简化Spring开发的快速启动框架
    Spring MVC:基于MVC的Web框架
    Struts2:老牌MVC框架
    JSF:JavaServer Faces,组件化UI框架
    Play Framework:轻量级、响应式Web框架
    Micronaut:云原生微服务框架
    Quarkus:为GraalVM和HotSpot优化的框架
  2. ORM框架
    Hibernate:最流行的JPA实现
    MyBatis:轻量级SQL映射框架
    JPA:Java持久化API标准
    EclipseLink:JPA参考实现
    jOOQ:类型安全的SQL构建框架
  3. 微服务框架
    Spring Cloud:微服务生态系统
    Dubbo:阿里巴巴RPC框架
    gRPC:Google的高性能RPC框架
    Helidon:Oracle的微服务框架
    Vert.x:响应式微服务工具包
  4. 安全框架
    Spring Security:认证和授权框架
    Apache Shiro:轻量级安全框架
    Keycloak:身份和访问管理解决方案
    JAAS:Java认证和授权服务
  5. 测试框架
    JUnit:单元测试框架
    TestNG:测试框架,JUnit替代品
    Mockito:模拟测试框架
    PowerMock:扩展其他模拟框架
    Selenium:Web应用自动化测试
  6. 日志框架
    Log4j/Log4j2:Apache日志框架
    Logback:Log4j的后继者
    SLF4J:简单日志门面
    Commons Logging:Apache通用日志接口
  7. 工具框架
    Apache Commons:通用工具库
    Guava:Google核心库
    Lombok:减少样板代码
    Jackson/Gson:JSON处理库
    Netty:异步网络应用框架
  8. 大数据框架
    Hadoop:分布式存储和处理
    Spark:大规模数据处理引擎
    Flink:流处理和批处理框架
    Storm:实时计算系统

企业开发中,Spring生态系统(Spring Framework、Spring Boot、Spring Cloud)是最主流的选择,结合MyBatis/Hibernate等ORM框架构成大多数Java企业应用的技术栈。

三、推荐开发顺序:自底向上

  1. 数据库表结构 (如果需要新增字段)

  2. Mapper 层

  3. Manager 层

  4. Service 层

  5. Controller 层

  6. 响应对象

    Controller层:处理HTTP请求
    Service层:业务逻辑处理
    Mapper层:数据访问层(MyBatis)
    Configs:配置类
    通俗案例

    1. **数据库层**:需要修改 TestFeatureDO 和相关的 Mapper
    2. **中间对象层**:需要修改 TestFeatureExtendInfo
    3. **响应对象层**:需要修改 TestFeatureGetResponse
    4. **数据库查询**:需要修改 TestFeatureServiceImpl 中的查询逻辑
    5. **响应转换**:需要修改 convertExtentInfoToResponse 方法
    

    优点:
    ✅ 确保数据可获取性
    ✅ 每层都有扎实的基础
    ✅ 便于单元测试
    ✅ 减少返工风险
    这种自底向上的方式特别适合数据驱动的功能开发,能够确保整个链路的数据流转是可靠的。

四、每个层的具体职责

  1. 数据库层(直接映射数据库表)
      // TestFeatureDO.java - 数据对象public class TestFeatureDO extends BasicFeatureTypeDO {private String modelId;           // 对应数据库 model_id 字段private String modelVersionId;    // 对应数据库 model_version_id 字段  private String englishName;       // 对应数据库 english_name 字段// ... 其他数据库字段}
    
    职责:
    🎯 一对一映射:每个属性直接对应数据库表的一个字段
    🎯 数据持久化:负责数据的增删改查操作
    🎯 类型转换:处理数据库类型到 Java 类型的转换
  2. 中间对象层(业务处理中的扩展信息对象/业务逻辑处理和数据组装)
     // TestFeatureExtendInfo.java - 业务扩展对象
    public class TestFeatureExtendInfo extends FeatureExtendInfo {private String modelId;                    // 来自 TestFeatureDOprivate Map<String, Object> modelArgToFeatureNameMap; // 业务处理后的复杂对象private List<FeatureSubjectDO> subjectList;    // 关联查询的其他数据private List<FeatureBusinessDO> businessList;  // 关联查询的其他数据// ... 更多业务相关字段
    }
    
    职责:
    🎯 数据聚合:将多个 DO 对象的数据组合在一起
    🎯 业务逻辑:处理复杂的业务规则和计算
    🎯 关联查询:整合来自不同表的相关数据
  3. 响应对象层(返回给前端的响应对象)
    // TestFeatureGetResponse.java - 响应对象
    public class TestFeatureGetResponse extends FeatureGetResponse {private String modelId;                    // 前端需要的字段private Long createTime;                   // 转换为时间戳格式private BasicUserInfo creator;             // 封装用户信息对象// 只包含前端需要的字段,隐藏内部实现细节
    }
    
    职责:
    🎯 API 契约:定义前端能获取到的数据结构
    🎯 格式转换:将内部数据格式转换为前端友好的格式
    🎯 数据过滤:只暴露前端需要的字段,隐藏敏感信息
  4. 数据库查询(在Service层进行数据获取/数据获取和初步组装)
     // ModelFeatureServiceImpl.get() 方法@Overridepublic TestFeatureGetResponse get(Long featureId, Long versionId, ...) {// 🔍 查询基础特征信息FeatureDO featureDO = featureManager.getById(featureId);// 🔍 查询模型特征版本信息TestFeatureDO modelFeatureDO = TestFeatureManager.getById(versionId);// ... 组装业务对象}
    
    职责:
    🎯 数据获取:从多个数据源获取原始数据
    🎯 关联查询:处理表之间的关系查询
    🎯 数据验证:确保数据的完整性和有效性
  5. 响应转换(将中间对象转换为响应对象/业务对象到响应对象的转换)
    // convertExtentInfoToResponse() 方法
    public TestFeatureGetResponse convertExtentInfoToResponse(TestFeatureExtendInfo extendInfo) {TestFeatureGetResponse response = new ModelFeatureGetResponse();// 🔍 字段映射response.setModelId(extendInfo.getModelId());response.setVersionId(extendInfo.getFeatureTypeId());// 🔍 格式转换response.setCreateTime(extendInfo.getCreateTime().getTime()); // Date → Long// 🔍 对象转换response.setCreator(new BasicUserInfo(extendInfo.getCreatorMis(), extendInfo.getCreatorName()));return response;
    }
    
    职责:
    🎯 数据映射:将业务对象的字段映射到响应对象
    🎯 格式转换:处理数据类型和格式的转换
    🎯 对象构建:创建前端需要的嵌套对象结构
为什么需要这么多层?
  1. 单一职责原则(SRP)
    数据库层 ← 只关心数据存储
    中间层 ← 只关心业务逻辑
    响应层 ← 只关心接口契约
  2. 解耦和可维护性
    // 如果没有分层,所有逻辑混在一起:
    public class BadExample {public String getFeature() {// 数据库查询 + 业务逻辑 + 格式转换 混在一起// 难以维护、测试和修改}
    }// 分层后,职责清晰:
    public class GoodExample {// 查询层:专注数据获取// 业务层:专注业务逻辑// 转换层:专注格式转换
    }
    
  3. 变更隔离
    数据库表结构变更 → 只影响 DO 层
    业务逻辑变更 → 只影响 ExtendInfo 层
    前端接口变更 → 只影响 Response 层
  4. 复用性
    // 同一个业务对象可以转换为不同的响应格式TestFeatureExtendInfo extendInfo = ...;// 详细响应TestFeatureGetResponse detailResponse = convertToDetailResponse(extendInfo);// 列表响应  TestFeatureListResponse listResponse = convertToListResponse(extendInfo);
    
  5. 测试友好
    // 可以独立测试每一层
    @Test
    public void testDataLayer() {ModelFeatureDO result = mapper.getById(1L);// 只测试数据访问
    }@Test  
    public void testBusinessLayer() {ModelFeatureExtendInfo result = service.buildExtendInfo(...);// 只测试业务逻辑
    }@Test
    public void testResponseLayer() {ModelFeatureGetResponse response = converter.convert(...);// 只测试格式转换
    }
    
    总结
    在这里插入图片描述
    这种分层设计虽然看起来复杂,但它带来的可维护性、可扩展性和可测试性是巨大的,特别是在大型企业级系统中,这种设计模式是必不可少的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93678.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S的ingress

一。ingress的介绍对于NodePort和LoadBalance&#xff0c;这两种方法&#xff0c;都有缺点&#xff1a;1.NodePort方式缺点会占用很多集群的端口&#xff0c;当集群服务变多的时候&#xff0c;缺点更加显著2.LB的缺点就是每一个service都需要一个LB&#xff0c;浪费&#xff0c…

实现自己的AI视频监控系统-序章

目录简介视频监控系统是什么&#xff1f;该系列课程你会学到什么&#xff1f;需要准备哪些工具&#xff1f;下期预告简介 在当今快速发展的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到我们生活的方方面面。其中&#xff0c;AI视频监控系统作为安防领域…

Pytorch GPU版本安装保姆级教程

本文将介绍在anaconda环境下安装pytorch的详细步骤。 Anaconda安装教程参考Anaconda安装保姆级教程。 目录 一、工具安装 二、创建虚拟环境 三、安装Pytorch CUDA Toolkit安装 Pytorch安装 总结 一、工具安装 点击链接官网codetou.com&#xff0c;下载安装最新版即可&…

重学React(六):脱围机制二

背景&#xff1a; 话不多说&#xff0c;继续学习&#xff0c;现在是Effect时间。 前期回顾&#xff1a; 重学React&#xff08;一&#xff09;&#xff1a;描述UI 重学React&#xff08;二&#xff09;&#xff1a;添加交互 重学React&#xff08;三&#xff09;&#xff1a;状…

【MySQL】索引(B+树详解)

MySQL(五)索引 一、索引的减I/O设计 1.读取量 2.搜索树 2.1方向 2.2有序 3.分多叉 3.1B树 弊端: 3.2B树 3.2.1非叶子-搜索字段 3.2.1.1海量分叉 3.2.1.1.1最大式 3.2.1.1.2最快式 3.2.1.2缓存内存 3.2.1.2.1字段总量小 3.2.1.2.2时间复杂度 3.2.1.3区间搜索向…

GPT-5博士级AI使用教程及国内平替方案

GPT-5博士级AI使用教程及国内平替方案一、GPT-5核心升级&#xff1a;到底强在哪里&#xff1f;1. **统一入口自动思考模式**2. **256K上下文40万汉字记忆**3. **人格系统长期记忆**4. **编程能力史诗级增强**二、注册与访问&#xff1a;国内用户也能免费上车1.官方渠道&#xf…

云计算-多服务集群部署实战指南:从JumpServer到Kafka、ZooKeeper 集群部署实操流程

简介围绕企业级服务部署与集群搭建&#xff0c;基于 OpenStack 私有云平台&#xff0c;介绍了一系列关键服务的实操过程。内容涵盖使用 CentOS7 系统部署 JumpServer 堡垒机并对接 controller 与 compute 节点&#xff0c;构建 RabbitMQ 集群&#xff08;含磁盘节点与内存节点配…

深入剖析Spring IOC容器——原理、源码与实践全解析

&#x1f31f; 你好&#xff0c;我是 励志成为糕手 &#xff01; &#x1f30c; 在代码的宇宙中&#xff0c;我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光&#xff0c;在逻辑的土壤里生长成璀璨的银河&#xff1b; &#x1f6e0;️ 每一个算法都是我绘制…

探秘C语言:数据在内存中的存储机制详解

探秘C语言&#xff1a;数据在内存中的存储机制详解探秘C语言&#xff1a;数据在内存中的存储机制详解一、二进制与进制转换&#xff1a;数据的不同"外衣"1.1基本概念1.2进制转换二、整数在内存中的存储&#xff1a;补码的奥秘原码、反码、补码总结探秘C语言&#xff…

HTML 常用标签介绍

目录 HTML 标签 HTML 常用标签速查表 文档元标签 页面结构与布局 文本内容与排版 链接与媒体 列表与表格 表单与交互 其他功能标签 文本结构标签 文本格式化标签 列表标签 链接与导航标签 媒体标签 容器与结构标签 表格标签 表单标签 元信息与文档标签 脚本…

kafka 冲突解决 kafka安装

目录 解法方法&#xff1a; 一般情况正常可以版本2.0.2 报错&#xff1a; File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen…

论文阅读 2025-8-9 [DiC, DropKey]

闲来没事&#xff0c;找点近一年的论文看看 1. DiC: Rethinking Conv3x3 Designs in Diffusion Models ✨ 一句话总结&#xff1a;DiC用沙漏架构稀疏跳跃条件门控重构纯Conv3x3扩散模型&#xff0c;在速度碾压Transformer的同时性能反超&#xff0c;为实时生成任务开辟新路径。…

16进制pcm数据转py波形脚本

将16bit的单声道或者双声道的16进制的pcm数据转成波形图片出来分析数据&#xff0c;python脚本如下&#xff1a;import numpy as np import matplotlib.pyplot as plt# 1: 单声道&#xff0c;2&#xff1a;双声道 PCM_CHANNELS 2# 你提供的十六进制数据 hex_str ""…

MySQL的锁:

目录 锁的介绍&#xff1a; 并发事务访问相同数据可以分为以下几种情况&#xff1a; 都是进行读操作&#xff1a; 都是进行写操作&#xff1a; 有读操作也有写操作&#xff1a; 读锁、写锁&#xff1a; 读锁&#xff1a; 写锁&#xff1a; 按照锁粒度分类&#xff1a;…

一道同分排名的SQL题

1 概述遇到这样一道题&#xff1a;(1) 有一张学生课程分数表&#xff0c;字段有&#xff1a;ID、名称、性别、科目、分数。&#xff08;名称换为学号更能标识唯一学生&#xff0c;但名称好阅读&#xff0c;故这里先认为名称可以唯一标识学生。&#xff09;(2) 用一个SQL&#x…

ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration

标题&#xff1a;Reverse Convolution and Its Applications to Image Restoration作者&#xff1a;Xuhong Huang, Shiqi Liu, Kai Zhang, Ying Tai, Jian Yang, Hui Zeng, Lei Zhang单位&#xff1a;Nanjing University, The Hong Kong Polytechnic University, OPPO Research…

mysql启动超时

mysql启动超时&#xff1a; 管理员打开CMD后允许net start MySQL57&#xff0c; 启动超时检查错误日志 MySQL 启动失败的具体原因通常记录在错误日志中。 日志路径&#xff08;根据你的安装方式可能不同&#xff09;&#xff1a; 默认位置&#xff1a;C:\ProgramData\MySQL\MyS…

Flink Stream API 源码走读 - window 和 sum

本文核心观点 核心观点&#xff1a;WindowedStream 是一个"假流"&#xff0c;它比 KeyedStream 更虚&#xff0c;只是一个 API 的过渡器&#xff0c;不是真正意义上的 DataStream&#xff0c;需要调用函数回归。 虚拟化时刻&#xff1a;从真实流到虚拟流 KeyedStream…

蓝牙 GFSK RX Core 架构解析

GFSK RX Core分为以下几个模块&#xff1a; 1.Frequency offset compensation CORDIC 2.A low pass filter 3.A power estimator for packet detection,RSSI and digital gaion computation for DPSK path 4.A demodulator implemented as Phase Shift Discriminator 5.A drequ…

微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)

1. 引言 在分散的微电网能源管理场景中,系统采用集中式云平台模式,为100个独立微电网用户提供高并发数据写入服务面临三大挑战:用户数据隔离、I/O性能瓶颈、多线程安全性。本文揭示一种新式的分片锁+三级缓存+sqlite多数据库文件连接池架构,在保持SQLite轻量级优势的同时,…