1.如何简洁高效的源码搭建一个SpringCloud2023的maven工程
2.spring框架中都用到了哪些设计模式?
3.原来这么简单Springboot多module项目工程搭建这样做就好了。
如何简洁高效的创建搭建一个SpringCloud2023的maven工程
选择Maven作为工程项目和依赖管理工具来搭建SpringCloud的maven工程,主要是模块因为其具有多模块和BOM依赖管理的特点,提高效率与统一性。源码
在Maven多模块项目中,创建依赖包不共享,模块酷客多源码但父模块可以统一管理全局共享依赖,源码避免重复配置,创建简化项目管理。模块
BOM依赖管理是源码Maven提供的一种集中管理依赖关系和版本的方式,通过定义在特殊POM文件中的创建依赖项和版本,确保多个项目或模块在使用相同依赖时具有统一版本,模块减少配置工作,源码避免依赖不一致问题。创建
使用BOM依赖管理时,模块只需在其他项目中引用BOM,酷q源码分析项目将自动获取BOM中定义的依赖版本,实现依赖版本的一致性与自动更新。
选择JDK的原因包括其语言特性和性能优化,以及与其他工具和库的良好兼容性。
顶级工程pom.xml文件定义项目配置,包括项目名称、版本、构建工具等基本参数,以及多模块项目结构。
工程的公用依赖BOM配置文件定义了一组全局依赖及其版本,供各个模块共享,减少重复配置并确保版本一致性。
与SpringCloud实战相关的源码信息可在具体文档或项目仓库中查阅,以获得详细代码实现和实践案例。
来自一线全栈程序员的DH社区系统源码八年探索与实践,持续迭代中。欢迎关注“雨林寻北”或添加个人卫星codetrend(备注技术),获取更多技术资源与交流。
spring框架中都用到了哪些设计模式?
面试官提问了 Spring 框架中设计模式的应用。候选者列举了一些常见的设计模式在 Spring 中的运用,如工厂模式(通过 ApplicationContext 或 BeanFactory 获取对象),单例模式(源码里使用 DCL 实现),代理模式(底层原理)以及模板方法模式(在事务管理器中应用),观察者模式(事件驱动模型的实现)。面试官进一步询问了候选者熟悉的设计模式,候选者提及了常见的如工厂模式、代理模式、模板方法模式、责任链模式、单例模式、分组调度算法源码包装设计模式、策略模式等,并解释了在项目中使用较多的是模板方法模式、责任链模式、策略模式、单例模式。在提及单例模式的实现方式时,候选者详细介绍了饿汉式、简单懒汉式、DCL 双重检查锁、静态内部类和枚举等实现方式,并解释了使用 DCL 的原因是为了避免指令重排问题,需要 volatile 关键字的支持。在项目的实际应用中,候选者提及了责任链模式用于处理请求、救援队源码模板方法模式用于处理公共逻辑以及代理模式的较少使用。此外,候选者还推荐了一个 Java 开源项目,介绍其业务清晰、注释详细、文档齐全、代码质量高,几乎每个方法和类都有中文注释,且通过阿里开发插件检查,使用了多种可靠稳定的中间件。该项目应用了多种设计模式,并在 GitHub 和 Gitee 上收获了大量 star。最后,候选者提供了项目的 Gitee 链接、GitHub 链接以及项目文档和视频链接,并简述了项目的功能和意义,以及使用教程和工程模块、系统流程的介绍。
原来这么简单Springboot多module项目工程搭建这样做就好了。
本文通过构建一个包含5个子模块的项目,演示SpringBoot在Maven环境下的多模块构建过程。
1、创建副工程
a. 通过Spring Initializr创建
b. 创建后删除不需要的文件,保留:.idea文件夹、项目pom文件以及一个*.iml文件
删除前->删除后
2、创建子模块
a. 右键点击父工程,选择New -> Module... 创建子模块。依次创建scaffold-common、scaffold-api、scaffold-dao、scaffold-service和scaffold-web共5个模块
注意:除了scaffold-web子模块创建时选择添加Spring Web依赖,其他模块暂时不添加依赖。
b. 将所有子模块的mvnw、mvnw.cmd文件及.mvn文件夹全部删除
c. 对于src里的内容,只保留scaffold-web的启动类和配置文件,其他子模块的启动类和配置文件都删除
3、编辑父工程的pom.xml文件
a. 将父工程pom.xml文件修改成如下内容,声明父工程包含的子模块,同时抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置
1、多模块项目中,父模块打包类型必须是pom。2、因为开发框架是Spring Boot,父模块默认继承spring-boot-starter-parent,因此可以删除spring-boot-starter和spring-boot-starter-test依赖(祖先已经包含了)
父工程pom.xml如下
4、编辑子模块pom.xml
a. 子模块scaffold-common的pom.xml文件内容如下,其中parent要使用顶层的父模块,同时由于项目用到了Lombok,所以还添加了lombok依赖
由于子模块的配置信息会继承父模块的,所以子模块原来的properties可删掉
b. 子模块scaffold-dao的pom.xml文件内容如下,同样parent要使用顶层的父模块,并添加scaffold-common子模块,以及数据库相关依赖
c. 子模块scaffold-service的pom.xml文件内容如下,同样parent要使用顶层的父模块,并添加scaffold-dao子模块依赖
实际开发中dao模块会引入对数据相关包的依赖,如mysql、Druid连接池、mybatis等
d. 子模块scaffold-web的pom.xml文件内容如下,同样parent要使用顶层的父模块,并添加scaffold-service子模块依赖
注意:之前创建这个子模块的时候已经添加了spring-boot-starter-web依赖,如果没有则手动添加
e. 子模块scaffold-api的pom.xml文件内容如下,同样parent要使用顶层的父模块
5、移动项目启动类所在包
a. 目前项目启动类ScaffoldWebApplication在com.xyy.scaffold包下面,需要将其移动到com.xyy包下
b. 移动的方式是右键点击ScaffoldWebApplication选择Refactor -> Move,将to package改成com.xyy
c. 移动后
6、编写controller并启动
a. 在com.xyy.scaffoldweb下写个测试Controller
b. 启动项目
c. 打开浏览器访问
搭建项目工程结构
搭建好多module项目并成功启动后,再来构建项目工程结构
1、scaffold-web模块
主要包含一个启动类、一个web和一个config包
2、scaffold-service模块
主要包含业务逻辑代码,包含业务接口及其实现类
3、scaffold-dao模块
主要包含数据访问层内容,DO定义、DB访问层以及数据库相关配置类
4、scaffold-common模块
包含每个模块可能都会用的一些基础类,如:dto、错误码、util工具类以及全局异常类和常量等
5、scaffold-api模块
主要负责外部依赖服务的管理,包含外部依赖服务的定义以及访问部分,以及通过facade模式做的封装类,如:request、response定义;外部服务api接口和外部服务通用枚举等
6、整体服务的调用过程如下
整理不易,干货分享就找@搬砖后端研发
本文中涉及的源码,如有需要可以私聊我呀