spring.factories 的基本使用

spring.factories 的基本作用

在若依-微服务版的源码学习中,发现项目中多次用到了 spring.factories 。因此记录一下自己的学习总结:
参考博客:

  • spring.factories 的具体原理可以参考:https://www.jianshu.com/p/00e49c607fa1

  • spring.factories 的基本作用可以参考:https://www.cnblogs.com/huanghzm/p/12217630.html

前提:

在微服务项目中,存在这多个不同的子模块,这些子模块可能是一个独立的Spring Boot 项目,也可能是普通的maven项目。

问题提出:

我们通常有这么一种需求,将多个子模块都可能用到的组件从单个子模块中抽离出来组成一个公共模块。比如将所有子模块的接口抽离,抽离出来的公共部分也可能存在着需要注入 spring 容器中的组件。

那么这样就引出了一个新的问题。我们都知道 Spring Boot的自动扫描包的扫描范围是 SpringBootApplication启动类所在的包以及子包目录下。那么我们抽离出来的公共部分在 SpringBoot 项目启动时就不可能会被自动扫包。

问题解决:

  1. SpringBootApplication启动类中添加 @import 注解。
  2. 使用 spring.factories

主要介绍 spring.factories

spring.factories文件需要创建在 resources/META-INF路径下。

main
|-- resources
|     └- META-INF
|         └-- spring.factories

spring.factories文件是通过 Properties 解析得到的,所以文件内容格式通常是安装以下方式:

com.xxx.interface=com.xxx.classname

如果一个接口希望配置多个实现类,可以使用 ", "进行分割。

在若依-微服务版中同样是通过 spring.factories解决:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.ruoyi.system.api.factory.RemoteUserFallbackFactory,\
  com.ruoyi.system.api.factory.RemoteLogFallbackFactory, \
  com.ruoyi.system.api.factory.RemoteFileFallbackFactory

通过 spring.factories文件的方式,在启动服务时(启动SpringBoot项目)只要引入的包即可实现第三方组件自动扫包。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值