Java轻量级代码工程

news/2025/2/23 21:18:28/文章来源:https://www.cnblogs.com/cicada-smile/p/18715097

一、背景简介

最近2年,很多公司接项目开始不挑剔了,只要核算下来有收益不会亏,就会库库的做各种没头没脑的项目,都是抱着多撑一天是一天的躺平心态。

如果项目和业务稳定,自然也有动力卷架构卷设计。

然而2024年对于很多研发团队的打工人来说,普遍都是处在随时卷铺盖走人的状态中,自然就是怎么省事怎么来,做项目时间和成本是最重视的维度。

抛开什么AI和各种工具加持,节省编程时间最有效的办法就是:拿现成的,最好只改个端口号。

二、工程结构

2024年上半年各种不大不小的项目写下来,其实从代码工程上看都是差不多的,服务端无非就是前和后两个代码工程,集成基础框架就可以增删改查了。

为了后续其它项目使用相同的基础工程,在第一个项目中,预留了代码工程的初期基础设计,方便那什么循环利用,在这篇文章简单分享一下。

基础的代码工程就这几块,实际上就是前后台两个单体服务,不涉及微服务和复杂架构,就是拿来应付各种奇怪的内部项目的快速开发;两个门面服务分别依赖framesharedthird三层代码包,然后运行启动类即可。

既然是单体服务,自然也不涉及数据库的拆分,能安稳运行就可以了。

<modules><!-- 门面管理 --><module>bm-facade</module><!-- 后台管理 --><module>bm-admin</module><!-- 业务共享层 --><module>bm-shared</module><!-- 框架管理 --><module>bm-frame</module><!-- 第三方接入 --><module>bm-third</module>
</modules>

三、模块化功能

3.1 框架模块

主要管理代码工程核心组件依赖,比如SpringBoot框架,MySQL数据库,MybatisPlus持久层,Swagger接口等,并且添加了一个公共过滤器。

@Slf4j
@Component
public class CommonFilter extends OncePerRequestFilter implements Ordered {@Overrideprotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response,FilterChain chain)throws ServletException, IOException {log.info("CommonFilter...doFilterInternal");// 请求向下转发chain.doFilter(request, response);}@Overridepublic int getOrder() {return 999 ;}
}

对于一些必要的配置类和二次封装,也放在了这一层,另外为了简化工程的复杂性,使用AOP的方式包装了日志记录和令牌核验;

AOP切面编程就不说了,这个在项目中经常使用;Token令牌的封装方式可以自行扩展,权限校验拿数据的记录对比一下即可。

@Component
public class BaseToken {@Getter@Setterprivate Long userId;@Getter@Setterprivate String userName;@Getter@Setterprivate String appName;@Getter@Setterprivate Long expireTime;private static final byte[] AES_KEY = Arrays.copyOf(MD5.create().digest(BaseToken.class.getPackage().getName()), 16);@Getterprivate final String currentType = BaseToken.class.getTypeName();public void expireTime(int effective) {expireTime = System.currentTimeMillis()/1000 + effective ;}public boolean expired() {return expireTime < (System.currentTimeMillis() / 1000);}public String toToken() {String data = JSONUtil.toJsonStr(this);return SecureUtil.aes(AES_KEY).encryptBase64(data);}public static BaseToken parseToken(String token) {String dataStr = SecureUtil.aes(AES_KEY).decryptStr(token);return JSONUtil.toBean(dataStr, BaseToken.class);}public boolean checkPermission (String... permissionCode) {AuthCheck authService = SpringUtil.getBean(AuthCheck.class);return authService.hasPermission(this.getUserId(), permissionCode);}}

使用AOP切面编程拦截要鉴权的方法即可。

@Component
@Aspect
@RequiredArgsConstructor
public class AuthAop {/*** 切入点*/@Pointcut("@annotation(com.butte.mound.frame.security.Auth)")public void logPointCut() {}@Around("logPointCut()")public Object around (ProceedingJoinPoint point) throws Throwable {try{// 检查权限checkAuth(point);// 执行方法Object result = point.proceed();return result;} catch (Exception e){e.printStackTrace();throw e ;}}private void checkAuth (ProceedingJoinPoint point){try{MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();Auth auth = method.getAnnotation(Auth.class);BaseToken token = TokenContext.getToken();token.checkPermission(auth.authCode());} catch (Exception e){e.printStackTrace();}}
}

3.2 业务共享模块

主要管理业务代码,数据库相关的持久层文件,如果在服务层前后台业务差异过大的话,也可以考虑分2层管理即可,在体量小的项目中,持久层代码几乎差异不大,最多只是一些自定义查询。

3.3 前后台模块

前后台两个模块,主要就是API接入层,通常就是用户访问和系统管理的两个服务,在逻辑上并没有什么本质差异,为了方便不同角色的请求管理,在两个工程内各添加了一个拦截器。

@Slf4j
@Component
public class FacadeInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("req uri : {}",request.getRequestURI());String facadeToken = "令牌";BaseToken token = BaseToken.parseToken(facadeToken);TokenContext.setToken(token);return Boolean.TRUE ;}
}

3.4 第三方模块

至于常见的第三方API对接,比如短信服务,OSS文件存储,第三方登录等,如果考虑多个项目多次复用的话,可以单独拎一层出来,简单封装一层工具类,方便之后随时替换,当然也可以在业务工程中直接调用第三方的封装类。

四、源码地址

文档仓库:
https://gitee.com/cicadasmile/butte-java-note源码仓库:
https://gitee.com/cicadasmile/butte-mound

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

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

相关文章

CTF-Web培训章节-社会工程学

目录 1、Web应用信息泄露 2、Web应用权限安全 3、社会工程学 4、总结 社会工程学 社会工程学是一种结合开源情报搜集进行人性攻击的一种网络攻击手段,综合运用信息搜集、语言技巧、心理陷阱等多种手段,完成欺骗的目的。社会工程学采用的技术手段可分为以下几种:社工库收集、…

火了整个春节的DeepSeek,他对AI产品的意义到底是什么?

https://www.cnblogs.com/yexiaochai/p/18699686相信春节期间各位的朋友圈一定被DeepSeek“轰炸”了,就算是普通人也获得了一些信息:国内AI取得了巨大突破。 但DeepSeek这次突破到底对一般的互联网从业者有什么帮助,绝大多数人却是一头雾水。 究其原因:Attention is All Yo…

使用JSXGraph进行平面二连杆机构动力学仿真

对于自由运动的机器人来说,其控制器设计可以按是否考虑机器人动力学特性分为两类。一类是完全不考虑动力学特性,只是按照机器人实际轨迹与期望轨迹间的偏差进行负反馈控制。这类方法通常被称为“运动控制(Kinematic Contorl)”,其中的控制器常采用PD或PID控制。运动控制的…

【探秘海洋伤痕】海洋环境污染损害的警世启示

在地球这个蓝色星球上,广袤无垠的海洋孕育了无数生命,支撑着地球的生态平衡与人类的生存发展。然而,随着工业化和现代化的加速,海洋环境遭受的伤害日益严重,海洋环境污染损害成为了我们必须直面的严峻问题。本文将带您深入理解何为海洋环境污染损害,揭示其背后的严峻现实…

Axurecloud 私有云破解(Axure Cloud for Business On-Premises)Axurecloud本地服务器

本文探讨了Axurecloud私有云的优势,包括快速访问、无资源限制、用户管理及数据安全性,以及为何需要破解国外服务器的限制。同时提供了从安装到破解的详细步骤,以及如何在AxureRP中连接私有云的指导。2025年2月13日更新最近有小伙伴联系我,说官方提供的Axurecloud不支持axur…

Axurecloud私有云破解(Axure Cloud for Business On-Premises)Axurecloud本地服务器

本文探讨了Axurecloud私有云的优势,包括快速访问、无资源限制、用户管理及数据安全性,以及为何需要破解国外服务器的限制。同时提供了从安装到破解的详细步骤,以及如何在AxureRP中连接私有云的指导。2025年2月13日更新最近有小伙伴联系我,说官方提供的Axurecloud不支持axur…

缺陷分析方法简介

本文分享自天翼云开发者社区《缺陷分析方法简介》,作者:Miya 一、缺陷分析简介 质量是反应软件与需求相符程度的指标,缺陷则被认为是软件与需求不一致的某种表现。因此通过对测试过程中所有已发现的缺陷进行分析和评估,可以更加清楚地了解软件的质量状况,同时可以帮助项目…

ABB IRB6640机器人减速机间隙过大维修方法

ABB IRB6640机器人随着使用时间的增长和工作强度的增加,可能会出现诸如减速机间隙过大等问题。一、ABB IRB6640机器人减速机间隙过大的危害当ABB IRB6640机器人的减速机间隙过大时,首先会影响机器人的运动精度。在工业生产中,精确的操作是保证产品质量的关键,例如在汽车零部…

GPT Assistant training pipeline

当然!这张图片清晰地展示了 GPT Assistant (如 ChatGPT, Claude 等) 的训练流程,我们来深入理解一下其中的知识点: 1. 训练阶段 (Training Stages)预训练 (Pretraining):数据集: 使用从互联网上收集的大量原始文本数据 (数万亿字),包括各种主题、风格和语言。这些数据通常质…

Burp Suite Professional 2025.2 发布,新增功能概览 (领先的 Web 渗透测试软件)

Burp Suite Professional 2025.2 发布,新增功能概览 (领先的 Web 渗透测试软件)Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities 请访问原文链接:https://sysin.org/…

【GreatSQL优化器-13】直方图

【GreatSQL优化器-13】直方图 一、直方图介绍 GreatSQL的优化器负责将SQL查询转换为尽可能高效的执行计划,但因为数据环境不断变化有可能导致优化器对查询数据了解不够充足,可能无法生成最优的执行计划进而影响查询效率,因此推出了直方图(histogram)功能来解决该问题。 直方…

PVE 8.3.1安装后的优化

网上PVE优化文章比较比较多,记录一下优化的过程: 1,删除订阅的弹窗:sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\(No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js && systemctl restart pvepro…