标签:条件 shared 实例 spring容器 repos policy http 开发 com
指的是针对很多spring 应用程序常见的应用功能,spring boot 能自动提供相关配置。
????Spring boot自动加载的原理一句话就可以说明: Spring Boot在进行SpringBootApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器。那么这个“META-INF/spring.factories”在哪呢?我们去原来的样例工程中找到引入的Maven依赖中的“spring-boot-xxx.jar”
# PropertySource Loaders org.springframework.boot.env.PropertySourceLoader=org.springframework.boot.env.PropertiesPropertySourceLoader,org.springframework.boot.env.YamlPropertySourceLoader # Run Listeners org.springframework.boot.SpringApplicationRunListener=org.springframework.boot.context.event.EventPublishingRunListener # Application Context Initializers org.springframework.context.ApplicationContextInitializer=org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,org.springframework.boot.context.ContextIdApplicationContextInitializer,org.springframework.boot.context.config.DelegatingApplicationContextInitializer,org.springframework.boot.context.web.ServerPortInfoApplicationContextInitializer
spring.factories文件提供了很多核心的配置类的类名,Spring Boot在启动的时候,就会加载这些类名,使用类加载器进行类的实例的创建。spring.factories文件会在springboot 初始化的时候加载进去,具体的源码这里就不贴出来了,可以参考下面的参考资料。
????Spring Boot默认会开启了自动配置,@SpringBootApplication
注解点进去
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)) public @interface SpringBootApplication { ... }
????@EnableAutoConfiguration
这个注解能根据类路径下的 jar 包和配置动态加载配置和注入bean,例如
举个例子,比如我在 lib 下放一个 druid 连接池的 jar 包,然后在 application.yml 文件配置 druid 相关的参数,Spring Boot 就能够自动配置所有我们需要的东西,如果我把 jar 包拿掉或者把参数去掉,那 Spring Boot 就不会自动配置。
????我们在spring-boot-autoconfigure-xxx.jar中的 spring.factories
看到
# Initializers org.springframework.context.ApplicationContextInitializer=org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer # Application Listeners org.springframework.context.ApplicationListener=org.springframework.boot.autoconfigure.BackgroundPreinitializer .... org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,
看到我们熟悉的 redis 等等其他常用的工具吗,autoconfigure根据属性配置文件里的进行自动生成相应的 bean .
标签:条件 shared 实例 spring容器 repos policy http 开发 com
原文地址:https://www.cnblogs.com/Benjious/p/12373536.html