在微服务中有不可避免有许多代码是在每个微服务中是重复的,这就需要我们将这些代码抽出来放在一个通用微服务中,但又因为通用微服务已经通过依赖注入到各个微服务中,就没有启动类了。
没有启动类这就造成了一件事情就是没有了SpringBootApplication
@SpringBootApplication是@springBoot configurat, @EnableAutoConfiguration,@ComponentScan的组合,他可以帮助我们实现Bean注入到Spring的IOC容器中。
这就导致了通用微服务中的Bean无法被扫描注册到IOC容器。
例如下面的将MQ中的message的转json格式的方法注册成Bean
@Configuration
public class MqConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
但没有被扫描注册到IOC容器里
使用spring.factories 可以解决这个问题,在resources下面创建文件夹META-INF 在创建一个文件spring.factories
SpringFactoriesLoader载荷和实例化从给定类型的工厂“spring.factories”文件可以获取路径。
其文件格式是:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.common.config.MyBatisConfig,\
com.example.common.config.JsonConfig
总得来说,spring.factories的作用是让Spring Boot知道要加载这个模块的哪些配置类