Spring Boot
September 10, 2021

M04 Q21 What is spring.factories file for?

spring.factories file, located in META-INF/spring.factories location on the classpath, is used by Auto Configuration mechanism to locate Auto Configuration Classes. Each module that provides Auto Configuration Class needs to have METAINF/spring.factories file with org.springframework.boot.autoconfigure.EnableAutoConfiguration entry that will point Auto Configuration Classes.

META-INF/spring.factories file is consumed by SpringFactoriesLoader class, which is used by AutoConfigurationImportSelector enabled by @EnableAutoConfiguration annotation used by default in @SpringBootApplication annotation.

Each Auto Configuration Class lists conditions, in which it should be applied, usually based on the existence of the specific class on the classpath or bean in the context. When conditions are met, @Configuration class produced beans within the application context to integrate your application with desired technology.

Auto Configuration use case for spring.factories file is probably most popular one, it also allows you to define other entries and achieve context customization with following classes:

  • ApplicationContextInitializer
  • ApplicationListener
  • AutoConfigurationImportFilter
  • AutoConfigurationImportListener
  • BeanInfoFactory
  • ContextCustomizer
  • DefaultTestExecutionListenersPostProcessor
  • EnableAutoConfiguration
  • EnvironmentPostProcessor
  • FailureAnalysisReporter
  • FailureAnalyzer
  • ManagementContextConfiguration
  • PropertySourceLoader
  • ProxyDetector
  • RepositoryFactorySupport
  • SpringApplicationRunListener
  • SpringBootExceptionReporter
  • TemplateAvailabilityProvider
  • TestExecutionListener