springboot starter的原理


参考原文:https://blog.csdn.net/weixin_38538285/article/details/119979419

一原理:

springboot可以帮助我们快速的开发一个后端应用,我们只需引入依赖,添加简单的配置就能实现对其他框架的整合。他的奥妙就在于它各种各样的starter。

springboot是如何实现引入一些jar包的依赖就将这些jar包中定义的spring的bean加载到spring容器中的呢?答案就是spring的SPI机制。

SPI(Service Provider Interface)服务提供接口,是实现服务解耦,插件自由插拔的一种机制。通过一些类加载器,去加载classpath下指定目录文件,文件中定义的有需要加载的类的全权限定名,然后这些类会被识别并加载。

Spring的SPI使用由SpringFactoriesLoader.loadFactoryNames方法实现。

加载所有依赖的jar包下classPath下META-INF/spring.factories文件,然后将解析properties文件,找到指定名称的配置后返回。

小知识:

(@Import(Abc.class),如果Abc类实现了ImportSelector接口,spring容器就会实例化Abc类,并且调用其selectImports方法;)

(@Import(Abc.class),如果Abc类实现了ImportBeanDefinitionRegistrar接口,spring容器就会实例化Abc类,并且调用其registerBeanDefinitions方法;)

调用链路:@SpringBootApplication ->@EnableAutoConfiguration ->@Import({AutoConfigurationImportSelector.class})

->selectImports ->getAutoConfigurationEntry
->getCandidateConfigurations ->SpringFactoriesLoader.loadFactoryNames ->loadSpringFactories

->classLoader.getResources("META-INF/spring.factories")
 

 





免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM