client Sdk学习
spring.factories
在Spring Boot中有一种非常解耦的扩展机制:Spring Factories,这种扩展机制实际上是仿照Java中的SPI扩展机制来实现的。
spring.factories文件是帮助spring-boot项目包以外的bean(即在pom文件中添加依赖中的bean)注册到spring-boot项目的spring容器。由于@ComponentScan注解只能扫描spring-boot项目包内的bean并注册到spring容器中,因此需要@EnableAutoConfiguration注解来注册项目包外的bean。而spring.factories文件,则是用来记录项目包外需要注册的bean类名。
用途
可用于加载一个Spring 不能扫描到的一个类,他可以是第三方的,也可以是自己写的,只要是Spring Boot 默认扫描路径不能够扫描到,都可以使用这种方式去加载!!!
SPI
- Interface接口
- provider定义与实现
- loader加载器
- 应用jdbc
约定
当服务的提供者,提供了服务接口的一种实现之后,需在项目的classpath下的META-INF/spring.factories文件中配置该接口的实现类名称,以便程序读取配置文件来实例化。
org.springframework.context.ApplicationContextInitializer=com.yue.test.CustomApplicationContextInitializer
Spring Factories实现原理
spring-core包里定义了SpringFactoriesLoader类,这个类实现了检索META-INF/spring.factories文件,并获取指定接口的配置的功能。在这个类中定义了两个对外的方法
-
loadFactories。根据接口类获取其实现类的实例,这个方法返回的是对象列表.
-
loadFactoryNames。根据接口获取其接口类的名称,这个方法返回的是类名的列表。
-
使用场景
加载第三方Bean
方法一:使用@Import注解;
方法二:在META-INF/spring.factories文件中配置
@EnableAutoConfiguration
让我们的starter里的@Configuration在使用者的项目里生效呢
- @EnableAutoConfiguration
注解加载的是资源目录META-INF文件下的spring.factories的文件。包括导入到项目中的Jar包的META-INF文件夹下的spring.factories文件。spring.factories文件是一个properties文件。 - @ComponentScan
注解的作用是扫描@SpringBootApplication所在的Application类(即spring-boot项目的入口类)所在的包(basepackage)下所有的@component注解(或拓展了@component的注解)标记的bean,并注册到spring容器中。
应用
开发api成sdk时,使用sdk的第三方不需要主动扫描MyClientAutoConfiguration.class(即在application上添加注解@EnableAutoConfiguration),只需要在打包成sdk的工程spring.factories中配置如下,其它项目在导入我的这个Jar的时候,会去加载MyClientAutoConfiguration
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xx.client.config.MyClientAutoConfiguration
原文链接:https://blog.csdn.net/yanluandai1985/article/details/106574073
原文链接:https://blog.csdn.net/SkyeBeFreeman/article/details/96291283