博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动配置的幕后英雄--SpringFactoriesLoader
阅读量:1841 次
发布时间:2019-04-25

本文共 2410 字,大约阅读时间需要 8 分钟。

SpringFactoriesLoader

SpringFactoriesLoader属于Spring框架私有的一种扩展方案(类似于Java的SPI方案java.util.ServiceLoader),其主要功能就是从指定的配置文件META-INF/spring.factories加载配置,spring.factories是一个典型的java properties文件,配置的格式为Key=Value形式,只不过Key和Value都是Java类型的完整类名(Fully qualified name),比如:example.MyService=example.MyServiceImpl1,example.MyServiceImpl2

然后框架就可以根据某个类型作为Key来查找对应的类型名称列表了

public abstract class SpringFactoriesLoader {
// ... public static
List
loadFactories(Class
factoryClass, ClassLoader classLoader) {
... } public static List
loadFactoryNames(Class
factoryClass, ClassLoader classLoader) {
... } // ...}

对于@EnableAutoConfiguration来说,SpringFactoriesLoader的用途稍微不同一些,其本意是为了提供SPI扩展的场景,而在@EnableAutoConfiguration的场景中,它更多是提供了一种配置查找的功能支持,即根据@EnableAutoConfiguration的完整类名org.springframework.boot.autoconfigure.EnableAutoConfiguration作为查找的Key,获取对应的一组@Configuration类:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.boot.autoconfigure.admin.SpringApplicationAdmin- JmxAutoConfiguration,\org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\org.springframework.boot.autoconfigure.PropertyPlaceholderAuto- Configuration,\org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\org.springframework.boot.autoconfigure.cassandra.CassandraAuto-Configuration,\org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\org.springframework.boot.autoconfigure.context.ConfigurationProperties-AutoConfiguration,\org.springframework.boot.autoconfigure.dao.PersistenceException-TranslationAutoConfiguration,\org.springframework.boot.autoconfigure.data.cassandra.Cassandra-DataAutoConfiguration,\org.springframework.boot.autoconfigure.data.cassandra.Cassandra-RepositoriesAutoConfiguration,\...

以上是从SpringBoot的autoconfigure依赖包中的META-INF/spring.factories配置文件中摘录的一段内容,可以很好地说明问题。

所以,@EnableAutoConfiguration自动配置的魔法其实就变成了:从classpath中搜寻所有META-INF/spring.factories配置文件,并将其中org.spring-framework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过反射(Java Reflection)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。

目前为止,还是Spring框架的原有概念和支持,依然没有“新鲜事”!

转载地址:http://rotuf.baihongyu.com/

你可能感兴趣的文章
Python抓取4A级猎头公司数据
查看>>
Python爬虫实战:selenium爬取电商平台商品数据
查看>>
Python爬虫实战:爬取股票信息
查看>>
简短的爬虫程序,14行Python代码轻松实现爬取网站视频
查看>>
pycharm的十个小技巧,让你写代码效率翻倍
查看>>
python数据可视化神器,我就服它
查看>>
Python爬虫如何实用xpath爬取豆瓣音乐
查看>>
python爬取网站数据四种姿势,你值得拥有
查看>>
python爬虫JS逆向:X咕视频密码与指纹加密分析
查看>>
python爬取抖音短视频详细教程(附带源码)
查看>>
Python爬取腾讯动漫全站漫画详细教程(附带源码)
查看>>
python实现电商平台秒杀商品脚本程序
查看>>
520快乐~用python实现520祝福弹窗
查看>>
Python制作属于自己的有声小说
查看>>
Python制作专属有声小说(调用百度语音合成接口)
查看>>
用Python爬取淘宝2000款T T
查看>>
17行python代码爬取堆糖网所有MeiNv图片
查看>>
Python爬取15万条《我是余欢水》弹幕,还原一个丧到极致的中年人生
查看>>
快来pick你喜欢的小姐姐吧,Python爬取青春有你2和创造营2020小姐姐数据
查看>>
使用python简单的制作贪吃蛇小游戏
查看>>