标签:mes factory start 图片 组件 ring tar 配置 select
该配置模块的主要使用到了SpringFactoriesLoader
,即Spring工厂加载器,该对象提供了loadFactoryNames
方法,入参为factoryClass和classLoader,即需要传入工厂类名称和对应的类加载器,方法会根据指定的classLoader,加载该类加器搜索路径下的指定文件,即spring.factories
文件,传入的工厂类为接口,而文件中对应的类则是接口的实现类,或最终作为实现类,所以文件中一般为如下图这种一对多的类名集合,获取到这些实现类的类名后,loadFactoryNames
方法返回类名集合,方法调用方得到这些集合后,再通过反射获取这些类的类对象、构造方法,最终生成实例。
mybatis-spring-boot-starter
、spring-boot-starter-web
等组件的META-INF文件下均含有spring.factories
文件,自动配置模块中,SpringFactoriesLoader
收集到文件中的类全名并返回一个类全名的数组,返回的类全名通过反射被实例化,就形成了具体的工厂实例,工厂实例来生成组件具体需要的bean。
之前我们提到了EnableAutoConfiguration
注解,其类图如下:
可以发现其最终实现了ImportSelector
(选择器)和BeanClassLoaderAware
(bean类加载器中间件),重点关注一下AutoConfigurationImportSelector
的selectImports
方法。
标签:mes factory start 图片 组件 ring tar 配置 select
原文地址:https://www.cnblogs.com/fanBlog/p/11126267.html