Java 的 SPI 机制

Java SpringBoot 加载 yml 配置文件中字典项

Spring的Factories就是Spring版本的Java Spi。 Spring Factories的最重要的功能就是:可以通过配置文件指定Spring容器加载一些特定的组件。

Spring Factories是一种类似于Java SPI的机制,它在META-INF/spring.factories文件中配置接口的实现类名称,然后在程序中读取这些配置文件并实例化。

Spring Factories机制提供了一种解耦容器注入的方式,帮助外部包(独立于spring-boot项目)注册Bean到spring boot项目容器中。

Spring容器管理的Bean的路径不在 Spring Boot 项目的扫描路径下

  • 在Spring Boot 项目中配置ComponentScan注解的扫描路径,添加需要被扫描的方法。
  • 通过在Spring Boot 项目中添加@EnableAutoConfiguration注解,并自定义@EnableXXXXConfiguration的注解,通过注解中的方法注入Bean。

spring.factories的是通过Properties解析得到的,所以我们在写文件中的内容都是安装下面这种方式配置的:

com.xxx.interface=com.xxx.classname

在Spring Boot的很多包中都能够找到spring.factories文件,接下来我们以spring-boot包为例进行介绍

  1. # Initializers
  2. org.springframework.context.ApplicationContextInitializer=\
  3. org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
  4. org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
  5. # Application Listeners
  6. org.springframework.context.ApplicationListener=\
  7. org.springframework.boot.autoconfigure.BackgroundPreinitializer
  8. # Auto Configuration Import Listeners
  9. org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
  10. org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
  11. # Auto Configuration Import Filters
  12. org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
  13. org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
  14. org.springframework.boot.autoconfigure.condition.OnClassCondition,\
  15. org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
  16. # Auto Configure
  17. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  18. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
  19. org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
  20. org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
  21. org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
  22. org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
  23. org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
  24. org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
  25. org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
  26. org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
  27. org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
  28. org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
  29. org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
  30. org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
  31. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
  32. org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
  33. org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
  34. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
  35. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
  36. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
  37. org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
  38. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
  39. org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
  40. org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration,\
  41. org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRestClientAutoConfiguration,\
  42. org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
  43. org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
  44. org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
  45. org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
  46. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
  47. org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
  48. org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
  49. org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
  50. org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
  51. org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
  52. org.springframework.boot.autoconfigure.data.r2dbc.R2dbcDataAutoConfiguration,\
  53. org.springframework.boot.autoconfigure.data.r2dbc.R2dbcRepositoriesAutoConfiguration,\
  54. org.springframework.boot.autoconfigure.data.r2dbc.R2dbcTransactionManagerAutoConfiguration,\
  55. org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
  56. org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
  57. org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
  58. org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
  59. org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
  60. org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration,\
  61. org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
  62. org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
  63. org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
  64. org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
  65. org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
  66. org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
  67. org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
  68. org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
  69. org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
  70. org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
  71. org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
  72. org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
  73. org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
  74. org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
  75. org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
  76. org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
  77. org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
  78. org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
  79. org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
  80. org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
  81. org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
  82. org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
  83. org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
  84. org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
  85. org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
  86. org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
  87. org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
  88. org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
  89. org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration,\
  90. org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
  91. org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
  92. org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
  93. org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
  94. org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
  95. org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
  96. org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
  97. org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
  98. org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
  99. org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
  100. org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
  101. org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration,\
  102. org.springframework.boot.autoconfigure.rsocket.RSocketMessagingAutoConfiguration,\
  103. org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration,\
  104. org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration,\
  105. org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration,\
  106. org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
  107. org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
  108. org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
  109. org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
  110. org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
  111. org.springframework.boot.autoconfigure.security.rsocket.RSocketSecurityAutoConfiguration,\
  112. org.springframework.boot.autoconfigure.security.saml2.Saml2RelyingPartyAutoConfiguration,\
  113. org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
  114. org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
  115. org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
  116. org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
  117. org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
  118. org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
  119. org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
  120. org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
  121. org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
  122. org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
  123. org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
  124. org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
  125. org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
  126. org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
  127. org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
  128. org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
  129. org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
  130. org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
  131. org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
  132. org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
  133. org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
  134. org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
  135. org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
  136. org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
  137. org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
  138. org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
  139. org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
  140. org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
  141. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
  142. org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
  143. org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
  144. org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration
  145. # Failure analyzers
  146. org.springframework.boot.diagnostics.FailureAnalyzer=\
  147. org.springframework.boot.autoconfigure.data.redis.RedisUrlSyntaxFailureAnalyzer,\
  148. org.springframework.boot.autoconfigure.diagnostics.analyzer.NoSuchBeanDefinitionFailureAnalyzer,\
  149. org.springframework.boot.autoconfigure.flyway.FlywayMigrationScriptMissingFailureAnalyzer,\
  150. org.springframework.boot.autoconfigure.jdbc.DataSourceBeanCreationFailureAnalyzer,\
  151. org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer,\
  152. org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryBeanCreationFailureAnalyzer,\
  153. org.springframework.boot.autoconfigure.session.NonUniqueSessionRepositoryFailureAnalyzer
  154. # Template availability providers
  155. org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\
  156. org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider,\
  157. org.springframework.boot.autoconfigure.mustache.MustacheTemplateAvailabilityProvider,\
  158. org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider,\
  159. org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider,\
  160. org.springframework.boot.autoconfigure.web.servlet.JspTemplateAvailabilityProvider

在日常工作中,我们可能需要实现一些SDK或者Spring Boot Starter给被人使用时,

我们就可以使用Factories机制。Factories机制可以让SDK或者Starter的使用只需要很少或者不需要进行配置,只需要在服务中引入我们的jar包即可。

Spring的Factories机制介绍的更多相关文章

  1. iOS 阶段学习第25天笔记(iOS沙盒机制介绍)

    iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...

  2. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

  3. Linux 内核的文件 Cache 管理机制介绍

    Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...

  4. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  5. Mysql锁机制介绍

    Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  6. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  7. Spring Ioc工作机制 初步

    Spring IoC工作原理 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖 ...

  8. Spring的事件机制详解

    同步事件和异步事件 同步事件:在一个线程里,按顺序执行业务,做完一件事再去做下一件事. 异步事件:在一个线程里,做一个事的同事,可以另起一个新的线程执行另一件事,这样两件事可以同时执行. 用一个例子来 ...

  9. spring 事务传播机制

    spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...

  10. redis锁机制介绍与实例

    转自:https://m.jb51.net/article/154421.htm 今天小编就为大家分享一篇关于redis锁机制介绍与实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要 ...

随机推荐

  1. Java发送http请求携带token,使用org.nutz

    发送http请求,需要携带token数据,创建Header传输 Header header = Header.create(); header.set("Authorization" ...

  2. What is RSS

    What is RSS?RSS (Rich Site Summary) is a format for delivering regularly changing web content. Many ...

  3. DHCP分配IP的流程

    1.DHCP客户端以广播的形式发送DHCP Discover报文 2.所有的DHCP服务端都可以接收到这个DHCP Discover报文,所有的DHCP服务端都会给出响应,向DCHP客户端发送一个DH ...

  4. How to Install VMware Tools on CentOS 6.5

    yum install perl gcc make kernel-headers kernel-devel -y [root@centos6 vmware-tools-distrib]# ./vmwa ...

  5. install package within python

    import os os.system("pip install numpy") import subprocess subprocess.call(['pip3', 'insta ...

  6. vim用法思维导图

  7. python求列表中n个最大或最小的值

    import heapq #y为结果列表,n为所求的n个值,x为来源列表 y=heapq.nsmallest(n,x) y=heapq.nlargest(n,x)

  8. linux 数据卷磁盘管理

    新加磁盘如何创建逻辑分区 查看命令 lvs  vgs pvs 1: 新建一个分区(partition)fdisk /dev/sdb 2:创建PV(物理卷)pvcreate /dev/sdb1pvs或 ...

  9. PHP 二维按照某个字段对数组排序

    function arraySort($arr, $keys, $type = 'asc') {//二维按照某个字段对数组排序 $keysvalue = $new_array = array(); f ...

  10. Ansible之Playbook介绍和使用

    1.https://blog.csdn.net/zfw_666666/article/details/124691877 1.Playbook介绍        Playbook与ad-hoc相比,是 ...