SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇
SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 - 第520篇
SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇
SpringBoot基本原理,轻松应对面试官 - 第522篇
最近发现一个AI工具 - 只需要上传一张照片,1分钟就可以生成一个舞蹈视频,我在思考要不要搞一个抖音账号,做个跳舞搞笑的账号???
https://dzwlai.com/viggle/#/?i=8NCBS8_WXTT
导读
对于基础的,技术人员大部分都懂,如果碰到一些特别的需求,一般就是在于一些小技巧就能够轻松解决,知道和不知道的差别就是技术方案上的不同。
所以,平时要都去了解一些小技巧,以此来增加自己快速解决需求的能力。
技巧1:容器启动完成操作
当你希望Spring容器正确初始化加载完成以后,执行一些操作,那么你可以监听ContextRefreshedEvent事件。该实际的触发是在refresh方法执行的最后阶段。
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
public void onApplicationEvent(ContextRefreshedEvent event) {
System.out.println("上下文刷新完成...") ;
// TODO
}
}
通过监听该事件,你可以在这里实现你自己的逻辑。
技巧2:异步处理提升性能
SpringBoot支持异步处理,你可以使用@Async注解来异步执行方法,提升应用的性能和响应速度,这个是一个好功能,如果执行异步功能,一般我们都要自己开线程去执行异步任务,但是用异步注解可以由框架启动一个内嵌的异步任务执行我们的代码逻辑,这个相当优雅,有没有?代码是不是很漂亮!
public class AsyncService {
public void executeAsyncTask() {
// 执行异步任务
}
}
技巧3: @Conditional的强大之处
不知道你们有没有遇到过这些问题:
(1)某个功能需要根据项目中有没有某个jar判断是否开启该功能。
(2)某个bean的实例化需要先判断另一个bean有没有实例化,再判断是否实例化自己。
(3)某个功能是否开启,在配置文件中有个参数可以对它进行控制。
如果你有遇到过上述这些问题,那么恭喜你,@Conditional很适合你。
技巧4:使用自定义BOM来维护第三方依赖
Spring Boot项目本身使用和集成了大量的开源项目,它帮助我们维护了这些第三方依赖。但是也有一部分在实际项目使用中并没有包括进来,这就需要我们在项目中自己维护版本。如果在一个大型的项目中,包括了很多未开发模块,那么维护起来就非常的繁琐。
怎么办呢?事实上,Spring IO Platform就是做的这个事情,它本身就是Spring Boot的子项目,同时维护了其他第三方开源库。我们可以借鉴Spring IO Platform来编写自己的基础项目platform-bom,所有的业务模块项目应该以BOM的方式引入。这样在升级第三方依赖时,就只需要升级这一个依赖的版本而已。
技巧5:考虑为常见的组织问题创建自己的自动配置
这一条也来自Josh Long(Spring Advocate,@starbuxman)——这个实践是针对高级用户的。
如果你在一个严重依赖Spring Boot的公司或团队中工作,并且有共同的问题需要解决,那么你可以创建自己的自动配置。
这项任务涉及较多工作,因此你需要考虑何时获益是值得投入的。与多个略有不同的定制配置相比,维护单个自动配置更容易。
如果将这个提供Spring Boot配置以开源库的形式发布出去,那么将极大地简化数千个用户的配置工作。
技巧6:保持@Controller的简洁和专注
Controller应该非常简单。你可以在此处阅读有关GRASP中有关控制器模式部分的说明。你希望控制器作为协调和委派的角色,而不是执行实际的业务逻辑。以下是主要做法:
1) 控制器应该是无状态的!默认情况下,控制器是单例,并且任何状态都可能导致大量问题;
2) 控制器不应该执行业务逻辑,而是依赖委托;
3) 控制器应该处理应用程序的HTTP层,这不应该传递给服务;
4) 控制器应该围绕用例/业务能力来设计。
要深入这个内容,需要进一步地了解设计REST API的最佳实践。无论你是否想要使用Spring Boot,都是值得学习的。
Spring Boot整合ElasticSearch实战 - 第511篇
Transaction rolled back because it has been marked as - 第512篇
一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇
idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇
Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭 - 516篇
Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇
SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇
SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇
SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 - 第520篇
SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇
SpringBoot基本原理,轻松应对面试官 - 第522篇
万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能