在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类,Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理,这样就可以使用@Autowired等注解,在需要使用bean的业务类中进行注入。这里起到关键作用的就是@ComponentScan,这是一个bean扫描注解,默认扫描的目录是启动类所在包下的所有包及子包,也就是说凡是标记了@Comp.NETn等注解类,Spring boot都会自动创建bean纳入Spring容器管理。
一个问题来了,是什么呢?如果我封装了一套公共的业务组件,也想把些组件类放到Spring容器里,方便在业务里注入使用,这时候应该怎么办呢?
最先想到的就是,应该就是更新@ComponentScan的扫描路径了吧,除了这个还有没有更好方法呢?答案是有的,且听我细细道来的。
主要是两种方式:
如果了解过Spring boot的自动装配的原理以及如何自定义自己的starter,对这个配置文件应该会很熟悉,Spring boot能够实现开箱即用,省去了许多繁琐的配置,spring-boot-autoconfigure.jar下的/META-INF/spring.factories配置文件起了关键作用。那个类里有什么呢?仔细会发现spring.factories中配置信息是key-value的形式,key是spring中预留的扩展点配置接口的全限定类名,vlue则是具体的配置类的全限定类名,如果有多个配置类,则以英文逗号隔开;
如果公共的业务组件封装好了,就可以在resources目录下,创建/META-INF/spring.factories配置文件,并实现Spring预留的扩展点配置接口,使用的时候引入到项目中,然后在Spring容器启动的时候,会读取classpath下所有的spring.factories中的配置类,然后纳入到Spring容器中。当然这个处理过程是很复杂的,这里不过多展开,我在网上找到了一张图,可以帮助你很好的理解整个过程,有兴趣的小伙们,不妨根据图上内容,再结合spring源码再深入研究一下。
其实org.springframework.boot.autoconfigure.AutoConfiguration.imports文件功能和Sping.factories的作用是一样的,这个用法是Spring boot2.7以后出现的,目的也是为引入外部的jar,把外部bean纳入到Spring容器,实现外部组件与Spring的集成,主要的区别在于引入的方式有些不同,spring.factories这种方式是在resources下创建/META-INF/spring.factories配置文件,内部是key-value的形式,这种则是创建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,内部是具体的要导入到Spring环境的中的配置类。
两种方式有一些区别,不过都是用来实现自动装配的。
SpringBoot和MyBatis的集成主要也是利用了SpringBoot的自动配置特性和MyBatis的映射特性。
在SpringBoot中,通过开启自动配置,系统会在ConfigurationClassPostProcessor这个BeanFactory的后置处理器中,读取spring.factories配置文件中的org.springframework.boot.autoconfigure.EnableAutoConfiguration,读取到所有的自动配置类进行注册。
而对于MyBatis,我们主要是通过MApperScan这个注解来注册Mapper。在SpringBoot中,如果某个类使用了@MapperScan注解,那么Spring会自动扫描该类所在的包,并将扫描到的Mapper接口注册到Spring容器中。这样,我们就可以在Service中使用@Autowired将Mapper注入,从而使用Mapper提供的方法对数据库进行操作。
此外,SpringBoot还集成了MyBatis的别名和类型处理器。这是通过扫描@Alias和@TypeAlias注解来实现的,它们可以帮助我们将类型进行转换,使得我们可以在MyBatis中使用更方便的类型,比如使用String代替硬编码的SQL语句。
项目里也经常会用到reids,这里举一个实例,以把redis与Springboot的集成,封装成一个starter。
Redis在Springboot中的配置类
/**
* Redis 配置类
*/
@AutoConfiguration
public class RedisAutoConfiguration {
/**
* 创建 RedisTemplate Bean,使用 JSON 序列化方式
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
// 创建 RedisTemplate 对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置 RedisConnection 工厂。
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27 Search:
Spring
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19 Search:
Spring
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30 Search:
Spring
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26 Search:
Spring
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19 Search:
Spring
Spring Boot2.0深度实践:核心原理拆解与源码分析一、引言Spring Boot是一个基于Java的轻量级框架,它简化了Spring应用程序的创建过程,使得开发者能够快速搭建一个可运行的应用...【详细内容】
2024-01-15 Search:
Spring
开发高并发秒杀抢购系统:使用SpringBoot3+Vue3的实践之旅随着互联网技术的发展,电商行业对秒杀抢购系统的需求越来越高。为了满足这种高并发、高流量的场景,我们决定使用Spring...【详细内容】
2024-01-14 Search:
Spring
Spring Boot 3.0是一款基于Java的开源框架,用于简化Spring应用程序的构建和开发过程。与之前的版本相比,Spring Boot 3.0在多个方面进行了改进和增强,使其更加易用、高效和灵活...【详细内容】
2024-01-11 Search:
Spring
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11 Search:
Spring
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10 Search:
Spring
▌简易百科推荐
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03 京东云开发者 Tags:Web Components
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08 InfoQ Tags:Kubernetes
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27 风舞凋零叶 Tags:Spring Security
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26 贝格前端工场 Tags:框架
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19 程序员wayn 微信公众号 Tags:Spring
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01 云云众生s 微信公众号 Tags:Kubernetes
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30 大噬元兽 微信公众号 Tags:框架
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26 HELLO程序员 微信公众号 Tags:Spring
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19 Java中文社群 微信公众号 Tags:SpringBoot
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16 程序员成功 微信公众号 Tags:Express.js
相关文章
- SpringBoot接口参数校验N种实用技巧大揭秘
- 如何让 Bean 深度感知 Spring 容器
- Springboot 框架中事件监听和发布机制详细
- Spring Boot中CORS问题及解决办法,源码解析
- 掌握Spring事件监听器的内部逻辑与实现
- Spring事件机制,深入剖析,提升你的技术水平!
- 一篇学会SpringBoot自动装配
- Spring 冷知识:一个提前 AOP 的机会
- Springboot起步依赖及其实现原理
- Springboot 中的 PropertySource 管理配置
- SpringBoot的配置加载机制
- Spring的BeanFactory与FactoryBean的区别,你
- 如何将本地jar文件打包到 springboot 执行j
- 认识一些常见的Spring Boot内置Health Indi
- Spring Boot的自动配置原理及示例说明
- 用 Arthas 定位 Spring Boot 接口的超时问
- 我在前端写Java SpringBoot项目
- 从CRUD到CQRS:使用Spring微服务转变你的架构
- 使用JIB插件轻松实现Spring Boot应用容器化
- 四个步骤,掌握Spring Cloud Stream
站内最新
栏目相关
· Web Components实践:如何搭建一个框架无关的AI组件库
· Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
· Spring Security:保障应用安全的利器
· 五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
· Spring Security权限控制框架使用指南
· 开发者的Kubernetes懒人指南
· 链世界:一种简单而有效的人类行为Agent模型强化学习框架
· Spring实现Kafka重试Topic,真的太香了
· SpringBoot如何实现缓存预热?
· 花 15 分钟把 Express.js 搞明白,全栈没有那么难
· 阿里“AI替换万物”框架火爆社区,网友:偶像不需要真人了?
· Spring Boot2.0深度实践 核心原理拆解+源码分析
· SpringBoot3+Vue3 开发高并发秒杀抢购系统
· Spring Boot 3.0是什么?
· 如何在Spring项目中配置MP(MyBatis-Plus)集成?
· 分布式事务框架选择与实践
· JavaScript前端框架2024年展望
· React与Vue性能对比:两大前端框架的性能
· 深度学习框架解读—Yolov5/Yolov7/Halcon对比分析
· FastAPI:高性能Web框架的简介与应用
站内热门
- 从零开始教你安装Oracle数据库
- 一文看懂HMS Core到底是什么
- 什么是VPN
- 做网站渗透测试,可以从哪方面入手?
- 五胡十六国
- 国家划分的艰苦边远地区范围和类别,最全版,终
- SpringBoot事物Transaction实战讲解教程
- 行程码的创始人马晓东
- 电脑键盘不能打字了按哪个键恢复?
- 12306购票时,静、复、智 是什么意思?
- 最全的VPN远程访问内网服务器的设置教程来
- 什么是古法手镯,与普通手镯有什么区别,值得花
- 5款电视上安装的浏览器,你家是哪款?
- 5种方法,教你如何在手机和电脑之间传输文件
- 通过26个实例彻底掌握 linux find 命令的使
- 主板红色的usb接口是干嘛的?
- 教你4种方法检验黄金的纯度,建议收藏
- 天道酬勤、地道酬德、人道酬诚、商道酬信
- 关于警衔你了解多少?人民警察99式警衔详解
- Tik Tok国际版抖音,如何免翻墙、免拔卡使用?
相关头条
· Golang中的强大Web框架
· Spark入门指南:从基础概念到实践应用全解析
· Spring Boot宣布支持Java 21:开发者的福音与挑战
· 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈
· Bazel是什么?如何挖掘 Bazel 的极致性能
· 物联网时代25大开源IOT框架
· 2023年流行的五大JavaScript框架
· 6种方式读取Springboot的配置
· 如何开始使用事件驱动的微服务
· 谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高
· Kafka实时数据即席查询应用与实践
· 最小响应式UI框架 VanJS 开源,仅 Preact 体积1/10!
· MyBatis的10种用法
· 全栈框架 Remix 大火?v1.16 发布,全力备战2.0!
· 微信小程序六大开发框架如何选
· Kubernetes的入门级实战
· 贾扬清开源 AI 框架 Caffe
· 适合做外包开发的Web框架
· SpringBoot对SpringMVC的自动配置,你知道多少?
· 手把手教你写spring boot starter
站内头条
- 简易百科财经之CPI跟我们到底有啥关系?
- 简易百科财经:什么是CPI?
- 美联储加息对黄金价格的影响有多大?
- 简易百科之什么是掼蛋?
- 简易百科之什么是站群?
- 简易百科SEO之什么是文章洗稿?
- 简易百科:让百度快速收录文章的排版技巧
- 简易百科是个什么网站?
- 如何避免和女性聊天时尴尬?
- 减少隐私泄露微信需要关闭的功能
- 简易百科:怎样使用手机才能减少隐私泄露?
- 抖音小店店铺主体怎么变更?抖音店铺的营业执
- 简易百科:什么是虚拟现实与增强现实?
- 腾讯QQ浏览器工具权益卡上线PC端,每月最低6
- 拼手气分5亿!支付宝2024年“五福节”活动开
- 美国硅谷历史简介
- 广州放开120平方米以上户型限购 进一步支持
- 证监会今起全面暂停限售股出借 转融券市场
- 融券两新规如何影响A股?融券T+0可用改为T+1
- 中小主播"困"在合同里: 9万粉抖音主播签约M