您现在的位置是:首页 >技术杂谈 >spring.factories 的作用是什么网站首页技术杂谈

spring.factories 的作用是什么

这儿有个昵称 2024-06-12 18:01:02
简介spring.factories 的作用是什么

spring.factories 文件用于在 Spring Boot 项目中配置自动配置项。它包含了一系列 key-value 对,key 是自动配置类的全限定名,value 是这些配置类对应的条件类。Spring Boot 会在启动时扫描 classpath 下的 META-INF/spring.factories 文件,并加载其中定义的自动配置类。这些自动配置类会在满足条件时自动生效,配置对应的 bean。举个例子,spring-boot-starter-web 中就有一个 spring.factories 文件,内容如下:

properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration

这会在 classpath 中找到 spring-webmvc 时,自动配置 HttpEncodingAutoConfiguration、MultipartAutoConfiguration 和 WebMvcAutoConfiguration 这三个配置类。所以,spring.factories 文件的主要作用是:1. 定义自动配置类及其条件
2. Spring Boot 在启动时会加载 spring.factories 文件中的自动配置类
3. 当自动配置类的条件满足时,对应配置就会生效这使得 Spring Boot 可以根据 classpath 中的 jar 包自动配置相应的 bean,无需手动配置,大大提高了开发效率。理解 spring.factories 文件的作用,可以帮助你更好地利用 Spring Boot 的自动配置特性,编写自己的 starter

前景回顾:

我需要在A服务中引入一个B服务的功能(类似中间件),B服务打包,A服务maven导入之后,A启动成功在调用的时候 发现调用不到B服务的功能。

找到问题:

后来发现是因为B服务的功能包(路径)名和A服务的不一样,在A服务中的SpringBoot启动类也只是扫描了A服务的包路径,这样就导致B服务的功能无法生效

解决问题:

1、我们可以在扫描包后在新增一个具体的路径,这样下面的功能就能生效

2、我们可以用 @Import({XX.class}) 导入指定想要生效的功能

3、我们可以在B服务的resources下新建相应的配置spring.factories,将我们想要生效的功能,填写到里面

可以参考springframework配置,这样当我们引入这个包的时候就默认去获取spring.factories里面的配置信息,这样的好处我们就无需在启动类上手写相关配置,比较简便。需要注意的是这个属于全局的,一旦配置,你的服务子服务也会引入。可能会引入一些不需要的功能,还需要看自己的取舍

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。