我的技术博客|222100306

ImBloodGirl ImBloodGirl 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

技术概述

Spring Boot是一个用于快速构建Java应用的框架,尤其适用于微服务架构。

MVC 模式实现业务逻辑与视图分离,支持团队协作。

我在团队开发中因缺乏Java和Spring Boot经验而遇到挑战,但通过不断学习和实践,我逐渐掌握了Spring Boot与Java的基础知识,理解自动配置机制、MVC 组件交互及异常处理,并在项目中实现了功能。

技术详述

(一)技术介绍

是什么

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。它使用“约定优于配置”(Convention Over Configuration)的理念,极大地简化了基于 Spring 的应用开发。

MVC 模式(Model-View-Controller)是一种用于设计创建 web 应用程序和软件的可扩展性架构模式。在 Spring Boot 中,MVC 模式主要由 Controller、Service、Repository(或 Mapper)和 Entity(或 Model)等组件构成。

做什么

Spring Boot 与 MVC 模式的结合,允许开发者快速构建、测试和部署可扩展的 web 应用程序。通过自动配置和简化的依赖管理,开发者可以专注于业务逻辑的实现,而无需过多关注底层配置和集成。

使用原因

学习并使用 Spring Boot 与 MVC 模式的原因主要有两点:

  1. MVC是最耳熟能详的架构,团队都理解,便于合作开发

  2. 团队大部分同学都更擅长Java语言

使用难点

对于我个人而言难点主要集中在以下几个方面:

  1. 理解 Spring Boot 的自动配置机制和工作原理。

  2. 熟练掌握 MVC 模式的各个组件及其之间的交互关系。

  3. 理解和处理可能出现的异常和错误情况。

(二)实际操作

项目架构图 imgimgimgimg

如何使用mvc架构

以下将结合上面列出的项目结构,介绍mvc架构。

Model(模型)

在Model部分,主要负责数据持久化和数据传输对象的定义。这对应于src/main/java/com/dogcat/entity目录。

  • Entity(实体类):我们定义了与数据库表结构相对应的Java对象。例如,User.java、Post.java、Comment.java等。这些类包含与数据库表字段相对应的属性和getter/setter方法。

  • DTO(数据传输对象):在Service层与Controller层之间,我们使用了DTO来传输数据。在entity/DTO子目录下,我创建了一系列的DTO类,如AuthenticationRequest.java、CommentDTO.java、PostDTO.java等,用于封装从Service层返回给Controller层的数据,或者从Controller层传递给Service层的数据。

  • VO/:VO(View Object)通常用于展示层,用于封装需要展示给前端的数据。VO被放在了entity/VO/目录下。

  • result/:这个目录下包含了结果封装类,如PageResult.java和Result.java,它们通常用于封装API的响应结果。

View(视图)

在Spring Boot的Web应用中,View通常指的是前端页面或模板。然而,由于我们的项目结构中没有直接包含前端页面的部分,我们将View视为以数据响应(我们用JSON)的形式返回给客户端的。在Controller层,我处理HTTP请求并返回响应,这可以看作是View的一种实现。

Controller(控制器)

在Controller层,我负责处理HTTP请求,并调用Service层来处理业务逻辑。这对应于src/main/java/com/dogcat/controller目录。例如:

  • UserPostController.java:这个类包含与userpost相关的HTTP请求处理方法。例如,我实现了一个方法用于处理用户发布帖子的请求。在该方法中,我调用Service层的相应方法来处理业务逻辑,并将结果以JSON或XML等格式返回给客户端。

Service(服务)

Service层是业务逻辑的核心部分,我负责处理与业务相关的操作,并且与Controller层紧密协作。

  • UserService.java 和 PostService.java(假设存在):这些类包含与用户和帖子相关的业务逻辑方法。例如,在UserService中,我实现了注册用户、登录用户、获取用户信息等方法;在PostService中,我实现了发布帖子、获取帖子列表、删除帖子等方法。

Mapper(映射器)

  • mapper/:这个目录下包含了所有的MyBatis Mapper接口,用于操作数据库。这些接口定义了如何与数据库进行交互。

Util(工具类)

  • util/:这个目录下包含了项目中使用的工具类,如AliOssUtil.java(用于与阿里云OSS进行交互)和JwtUtil.java(用于处理JWT相关的操作)。

Filter(过滤器)

  • filter/:这个目录下包含了用于处理HTTP请求的过滤器,如JwtRequestFilter.java(用于在请求中验证JWT令牌)。

问题和解决

(一)两个mapper

其实在java和resources下分别有一个mapper文件夹。

【分析】而java中的mapper是用java语言写的,而resources下是用xml语言写的。

当我进行函数调用的时候,我将两个mapper文件夹下所需的增删改查都用了同样函数名的函数,并都实现了。

【冲突】后来调用的时候发现会冲突。因为,调用resources的mapper就不能调用java的mapper了。

【原因】不然程序无法辨别你到底调用的是哪个文件夹下的函数。所以我得到了个结论是,这两个文件夹下的函数是同等级的,都会被扫描到。

(二)JWT鉴权

因为关于项目有太多问题和解决可以分享了,所以这里分享另一些令我印象深刻的问题。

1 加Bearer

JWT产生token出来后,怎么加到Header里呢?我以为直接把token放到Author里就行,但是其实前面要加一个 Bearer和空格。

【Python】这和Python就不一样,Pyhton的flask架构,校验时是不用加这个标识的。

这是Java特有的。

2 修饰符

【Python】在Python里,JWT鉴权可以以注解的方式在每一个url前加上,表示要先鉴权才可以继续下一步。

而在Sprinboot里,写好了JWT时,设定哪些路由需要鉴权,是在函数内定义的。如下:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/authenticate").permitAll()
                    .requestMatchers("/frontend/user/login").permitAll()
                    .requestMatchers("/frontend/user/register").permitAll()
                    .requestMatchers("/frontend/**").authenticated()
                    .requestMatchers("/backend/**").permitAll()
                    .anyRequest().permitAll()
            )
            .sessionManagement(session -> session
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            );
​
    http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
​
    return http.build();
}

(三)Apipost调试

一开始下载项目直接运行后,发现把接口文档下载到自己软件上时,直接调试是不能成功的。

【原因】因为接口文档只会把url载入,而body等内容是不会同步的,每次电脑开关机也都会消失,需要每次都手动输入。

总结

在这篇技术博客中,我详细回顾了自己在团队开发过程中使用Spring Boot框架和MVC模式的经历。起初,由于对Java和Spring Boot不够熟悉,我在项目开发中遇到了不少挑战。然而,通过持续的学习和实践,我逐步掌握了Spring Boot的基础知识,深入理解了其自动配置机制、MVC模式中各个组件之间的交互,以及如何有效处理异常。

我认识到Spring Boot之所以能简化新Spring应用的搭建和开发过程,是因为它采用了“约定优于配置”的理念。在MVC模式中,我了解了Controller、Service、Repository和Entity等组件的作用,它们共同构成了一个可扩展的web应用程序架构。我学习到,团队之所以选择MVC模式,一方面是因为它广为人知,便于团队合作开发;另一方面是因为团队成员普遍擅长Java语言。

在实际开发中,我面临了一些技术难点,包括理解Spring Boot的自动配置机制、熟练掌握MVC模式的组件交互,以及处理异常和错误。我通过实际操作,逐渐克服了这些难点。例如,在项目架构中,我负责了Model部分,包括数据持久化和数据传输对象的定义。我创建了实体类、DTO、VO以及结果封装类,以适应不同层次的数据需求。

我还遇到了一些具体的问题,比如Java和XML两种不同形式的Mapper冲突问题,我通过分析和实践解决了这一冲突。在JWT鉴权方面,我学习了如何在Spring Boot中正确地将token添加到Header,并设置了哪些路由需要鉴权。我还分享了使用Apipost进行接口调试时遇到的问题,以及如何确保调试的顺利进行。

总的来说,通过这一系列的学习和实践,我不仅提升了自己的技术能力,还加深了对团队协作重要性的认识。这些经验对我未来的软件开发职业生涯无疑是宝贵的财富。

参考文献

  1. Spring Boot 官方文档

  2. Spring MVC 官方文档

  3. Spring Boot 教程

  4. 深入理解 Spring Boot

  5. Spring MVC 实战

...全文

相关推荐

弱电网下光伏并网逆变器序阻抗建模仿真复现扫频法【序阻抗判断稳定性】

内容概要:本文聚焦于弱电网条件下光伏并网逆变器的序阻抗建模与稳定性分析,系统阐述了基于扫频法的阻抗特性仿真与复现方法。通过构建正负序阻抗模型,深入剖析逆变器在弱电网环境中的动态响应特性,结合锁相环、电流环等关键控制环节对系统阻抗的影响机制,采用序阻抗稳定性判据评估多机并网或复杂电网条件下的系统稳定裕度。研究在Simulink平台中实现激励信号注入、频率响应采集与阻抗曲线绘制,为高比例新能源接入背景下并网系统的稳定性分析提供了可靠的仿真手段与理论支撑,尤其适用于SCI级别论文成果的复现与拓展验证。; 适合人群:电力电子、新能源并网技术及相关领域的硕士/博士研究生、科研人员,以及从事光伏逆变器、微电网稳定控制开发的工程技术人员。; 使用场景及目标:①掌握扫频法在电力电子装置阻抗建模中的具体实施流程;②理解并应用基于序阻抗的稳定性判据进行系统稳定边界分析;③用于高水平学术论文(如SCI期刊)中阻抗建模与稳定性分析部分的仿真复现与方法验证; 阅读建议:建议读者结合文中所述方法与提供的参考文献,自主搭建Simulink仿真模型,逐步完成扰动信号设计、数据采集、傅里叶分析及阻抗拟合全过程,深入探究控制参数变化对系统阻抗特性和稳定性的具体影响,强化理论与实践的融合能力。

欢多天天写代码

三相并网逆变器虚拟阻抗+统一有源阻尼策略SVPWM+SPWM调制仿真

内容概要:本文档系统性地介绍了三相并网逆变器的核心控制技术及其在复杂电网环境下的仿真应用,重点涵盖虚拟阻抗与统一有源阻尼策略在SVPWM和SPWM调制方式下的实现方法,旨在提升逆变器的稳定性与电能质量。内容包括无功功率扰动孤岛检测、中点电位平衡控制、低电压穿越(LVRT)、模型预测控制(MPC)、正负序分离、电网前馈控制等关键技术,并扩展至风储联合调频、微电网下垂控制、虚拟同步发电机(VSG)、构网型逆变器等多种典型电力系统应用场景。所有技术均配有基于Simulink/Matlab平台的完整仿真模型、参考文献及说明文档,强调理论分析与仿真实践的深度融合,突出科研中“借力”与创新思维的重要性。; 适合人群:电气工程、自动化、新能源等相关专业的研究生、科研人员及从事电力电子与可再生能源系统开发的工程师;具备MATLAB/Simulink仿真基础和电力系统专业知识的技术人员。; 使用场景及目标:①开展三相并网逆变器控制策略的研究与优化设计;②复现高水平学术论文中的控制算法;③完成毕业课题、科研项目或工程仿真验证;④掌握虚拟阻抗、有源阻尼、SVPWM/SPWM调制、MPC、VSG等核心技术的建模与实现方法;⑤支撑微电网、构网型变流器等前沿方向的科研攻关。; 阅读建议:建议按照资源目录结构化学习,优先选择与自身研究方向契合的内容模块,结合提供的仿真模型、参考文献和说明材料进行实操演练,注重从理论推导到仿真实现的全过程理解,充分利用共享网盘资源深化技术掌握,提升科研效率与创新能力。

欢多天天写代码

chromedriver-win32-159.0.8133.0(Canary).zip

chromedriver-win32-159.0.8133.0(Canary).zip

LCG元

计算机“101计划”《人工智能引论》教学大纲+课件+实训案例

计算机“101计划”《人工智能引论》教学大纲+课件+实训案例

qq_38220914

语音输入法离线语音输入转文字工具2.0支持双档本地识别模型,中英混说精准转写,纯离线运行保护隐私,让打字更高效.zip

大家好,我是大飞哥。日常打字时,频繁切换输入法、断网无法语音转写、或担心语音数据被传至云端,是许多办公族和内容创作者的共同痛点。这款离线语音输入工具 ,正是为此量身打造的 Windows 桌面语音辅助利器。它的核心使命就是按住快捷键说话,松开文字自动上屏,全程本地离线识别,让您在任何可输入文字的窗口内都能实现高效、私密的语音输入,彻底告别网络依赖与隐私焦虑。 在核心功能上,软件内置了两档本地语音识别模型,通过主界面下拉框即可随时切换。默认的“离线·标准”模式响应极快,支持中英混说且自带标点,非常适合日常聊天与文档撰写;而“离线·精准”模式则对纯中文、方言口音及长段落口述的识别准确度更高。更贴心的是,它具备实时预览与一键取消机制,说话过程中若发现说错,按下 Esc 即可取消,一个字都不会误输入;若目标窗口不支持直接写入,文字会自动存入剪贴板,方便您按 Ctrl+V 粘贴,确保每次发声都不白费。 这款工具在具体场景中的表现十分亮眼。对于办公白领,在填写表格、撰写邮件或使用微信、QQ 沟通时,无需频繁切换窗口,按住右键说话即可快速完成信息录入;对于程序员与文字工作者,在代码编辑器或文档中口述注释与段落,能显著提升创作效率;对于经常出差的商务人士,在飞机、高铁等断网环境下,它依然能稳定工作,不经过任何服务器,真正做到了“说了什么只有自己知道”,私密性极佳。 使用体验方面,软件将极简操作贯彻到底。解压后双击 大飞哥语音输入,右下角托盘出现蓝色话筒图标即代表准备就绪。用户只需将光标点进目标输入框,按住右 Alt说话,说完松开,文字便会自动写入。主界面提供了设置快捷键与开机自动启动选项,方便用户按习惯自定义组合键;关闭主窗口并不会退出程序,而是缩至托盘持续待命,彻底退出只需右键托盘或点击主界面按钮,逻辑清晰,零门槛上手。

大飞哥软件自习室
评论 1
收藏 已收藏
分享
返回顶部