1.如何简洁高效的源码搭建一个SpringCloud2023的maven工程
2.spring框架中都用到了哪些设计模式?
3.原来这么简单Springboot多module项目工程搭建这样做就好了。
如何简洁高效的创建搭建一个SpringCloud2023的maven工程
选择Maven作为工程项目和依赖管理工具来搭建SpringCloud的maven工程,主要是模块因为其具有多模块和BOM依赖管理的特点,提高效率与统一性。源码
在Maven多模块项目中,创建依赖包不共享,模块返利开发源码但父模块可以统一管理全局共享依赖,源码避免重复配置,创建简化项目管理。模块
BOM依赖管理是源码Maven提供的一种集中管理依赖关系和版本的方式,通过定义在特殊POM文件中的创建依赖项和版本,确保多个项目或模块在使用相同依赖时具有统一版本,模块减少配置工作,源码避免依赖不一致问题。创建
使用BOM依赖管理时,模块只需在其他项目中引用BOM,源码家族项目将自动获取BOM中定义的依赖版本,实现依赖版本的一致性与自动更新。
选择JDK的原因包括其语言特性和性能优化,以及与其他工具和库的良好兼容性。
顶级工程pom.xml文件定义项目配置,包括项目名称、版本、构建工具等基本参数,以及多模块项目结构。
工程的公用依赖BOM配置文件定义了一组全局依赖及其版本,供各个模块共享,减少重复配置并确保版本一致性。
与SpringCloud实战相关的源码信息可在具体文档或项目仓库中查阅,以获得详细代码实现和实践案例。
来自一线全栈程序员的jodconverter 源码八年探索与实践,持续迭代中。欢迎关注“雨林寻北”或添加个人卫星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、整体服务的调用过程如下
整理不易,干货分享就找@搬砖后端研发
本文中涉及的源码,如有需要可以私聊我呀