1.【原来这么简单】Springboot多module项目工程搭建这样做就好了。源码
2.Spring Security5后基于Oauth2.1的源码Authorization Server 实现 (官方demo,稍作修改)
3.学习编程|Spring源码深度解析 读书笔记 第5章:容器的源码功能扩展
4.CKEditor5 + SpringBoot实战(五):SpringBoot整合Freemarker
【原来这么简单】Springboot多module项目工程搭建这样做就好了。
本文通过构建一个包含5个子模块的源码项目,演示SpringBoot在Maven环境下的源码多模块构建过程。
1、源码ride界面源码创建副工程
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连接池、bcos源码解析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、整体服务的调用过程如下
整理不易,干货分享就找@搬砖后端研发
本文中涉及的源码,如有需要可以私聊我呀
Spring Security5后基于Oauth2.1的Authorization Server 实现 (官方demo,稍作修改)
QQ群 说明 Spring Security5之后,实现Oauth不再推荐使用spring-security-oauth2。官方推荐了一种新的方法(github.com/spring-proje...)。 需要注意的是,该方式支持的不是oauth2,而是oauth2.1。关于oauth2.1的详细介绍,可以参考:oauth.net/2.1/ 和 aaronparecki.com//1...。 摘自 oauth2.net 网站上对比 oauth2 的说明: 主要区别(以下使用翻译软件翻译,大致意思没错) 官方demo运行 根据 github.com/spring-proje... 上的说明,使用 gradle 命令运行即可。 复制官方代码(官网 userdetails 使用内存模式,我修改成了 jdbc,外卖源码 VUE更加直观),使用 postman 进行测试。 代码位置:authorization-server 测试 查看自动创建的表结构: 浏览器访问:localhost:/h2-console... 点击 Connect: 我们看到创建了五张表,打开表会发现数据也被初始化进去了。 启动项目,请求授权码模式地址: 输入用户名密码(user1, password): 勾选授权 scope,点击 submit consent 按钮: 地址栏:baidu.com/?... 授权码 code=dPEZCnsiz2WPk5mWdnPImxbSQkbwK7-yPKmgJuR2NHbswtbXWZFjgZr6MEXfIqi8JhRourmlSSYVVfGuCN-ep8jbQwxHsqrUVeeY-1XRHkpqaQ2UM9-ulbTsU0mg 打开 postman 通过该 code 获取 access_token: 点击 send,返回: JSON 数据如下: 刷新 token 请求后结果: JSON 数据是: 简化模式(response_type=token)在 oauth2.1 被移除。 返回结果如图: JSON 结果: 之前以为是 bug,就提了 issue(github.com/spring-proje...),官方回复不支持。 但是有扩展方式。还没弄。具体可看我提出的 issue 的作者回复。 官方使用的是 in-memory 方式。本人通过查看源码发现还支持 jdbc 方式,redis 方式不支持。之后会根据 demo 修改一版 jdbc 方式,以及动态查询用户名密码的方式。 spring-security-oauth2 的实现方式,可查看我之前的笔记 知乎:zhuanlan.zhihu.com/p/... github 源码:github.com/xpp/spr... 本文内容 github 地址是:github.com/xpp/spri... 梦想越是美丽,就越是显得遥不可及。可奇怪的是,一旦你下定了决心,很快地,那些梦想就一一成为了现实!学习编程|Spring源码深度解析 读书笔记 第5章:容器的功能扩展
深入理解Spring容器的扩展功能:学习笔记
作者:牛客网-张学友
在Spring框架中,容器功能的扩展是其强大和灵活的关键。首先,ApplicationContext相较于BeanFactory,提供了更多功能,它是BeanFactory的子类,包含了其所有功能并有所扩充。主要区分点在于ApplicationContext的启动过程和其特有的扩展功能。
通过`ClassPathXmlApplicationContext`的实例化,开启源码探索之旅。在构造函数和`refresh`方法中,Spring对配置文件解析,并实现了一系列扩展,如环境变量处理、配置文件加载、Spring Expression Language (SPEL)的支持、属性编辑器的注册以及ApplicationContextAwareProcessor的使用等。这些扩展不仅增强了容器的灵活性,还为开发者提供了更丰富的控制选项。
例如,`refresh`方法中包含了初始化准备工作、BeanFactory的获取和定制、XML文件解析、bean定义填充、Spring表达式解析、属性编辑器注册、BeanPostProcessor的处理、依赖处理和国际化功能等。这些步骤体现了Spring框架的高度可扩展性,使得用户可以根据项目需求定制容器行为。
总结来说,Spring容器的功能扩展涉及到了配置文件处理、表达式语言、事件监听、国际化等多个方面,使得开发过程更加便捷且易于定制。想了解更多细节,可以参考作者的原文链接和更多读书笔记资源。
CKEditor5 + SpringBoot实战(五):SpringBoot整合Freemarker
在Spring Boot整合CKEditor编辑器的实战系列文章中,我们将探讨如何在Spring Boot应用中使用CKEditor编辑器,涵盖基本环境搭建、文件上传、数据持久化、CKEditor5安装、与视频插入、内容获取与设置等。
本系列项目的源码已同步更新至码云与GitHub,您可选择任一平台下载。访问地址如下:
通过Git命令行工具下载,执行如下命令:
项目使用FreeMarker作为模板引擎,用于生成动态文本输出。FreeMarker基于Java开发,使用FTL模板语言编写,专注数据展示,不关注数据呈现。
Maven依赖配置在pom.xml文件中完成,确保SpringBoot项目引入FreeMarker所需依赖。
SpringBoot应用默认可直接使用FreeMarker,无需额外配置。若需自定义配置,如模板后缀与存放路径,参照官方文档操作。
Spring MVC的ViewResolver接口用于视图解析,创建FreeMarkerViewResolver实例作为解析器,覆盖默认配置,如缓存关闭、模板前缀与后缀。
配置FreeMarker模板路径,Spring Boot默认路径为"classpath:/templates/",额外添加自定义路径,确保模板文件查找有序。
在“/templates/”目录下,使用FreeMarker创建HTML模板。当请求特定URL时,Spring将处理模板并输出数据,模板中通过表达式获取模型内容。
编写HelloController处理请求,创建hello.html模板,输出“Hello CKEditor5”信息。启动应用,访问“http://localhost:/hello”,验证页面输出。
本章总结了Spring Boot中集成FreeMarker的流程,介绍了其基本使用与配置。欲了解更多功能与信息,访问FreeMarker官网。下章将详细介绍CKEditor5的安装与初始化。
如需转载,请注明文章作者及出处,未经许可,请勿擅自转载。