0
点赞
收藏
分享

微信扫一扫

JavaHashMap的扩容机制

陌岛 2023-08-23 阅读 44

一、什么是 SpringBoot?

二、为什么要用 SpringBoot?

三、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

1. application 配置文件

2. bootstrap 配置文件

有以下几个应用场景:

四、SpringBoot 的配置文件有哪几种格式?它们有什么区别?

1. .properties

app.user.name = javastack

2. .yml

app:
  user:
    name: javastack

五、SpringBoot 的核心注解是哪个?它主要由哪几个注解组成的?

主要组合包含了以下 3 个注解:

六、开启SpringBoot特性有哪几种方式?

七、SpringBoot 需要独立的容器运行吗?

八、运行 SpringBoot 有哪几种方式?

九、SpringBoot 自动配置原理是什么?

 org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(Class<?>, ClassLoader)
public static List<String> loadFactoryNames(Class<?> factoryClass, 
ClassLoader classLoader) {
    String factoryClassName = factoryClass.getName();
    try {
        Enumeration<URL> urls = (classLoader != null ? 
classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
lassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
        List<String> result = new ArrayList<String>();
        while (urls.hasMoreElements()) {
            URL url = urls.nextElement();
            Properties properties = PropertiesLoaderUtils.loadProperties(
new UrlResource(url));
            String factoryClassNames = properties.getProperty(factoryClassName);
          result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(
factoryClassNames)));
        }
        return result;
    }
    catch (IOException ex) {
        throw new IllegalArgumentException("Unable to load [" 
            + factoryClass.getName() +
            "] factories from location [" 
            + FACTORIES_RESOURCE_LOCATION + "]", ex);
    }
}

这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。

/**
* The location to look for factories.
* <p>Can be present in multiple JAR files.
*/
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
查看Spring Boot自带的自动配置的包: spring-boot-autoconfigure-1.5.6.RELEASE.jar,
打开其中的META-INF/spring.factories文件会找到自动配置的映射

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
...

再来看看数据源自动配置的实现注解

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
public class DataSourceAutoConfiguration {
...
@Configuration,@ConditionalOnClass就是自动配置的核心,首先它得是一个配置文件,其次根据类

十、如何理解 SpringBoot 中的 Starters?

 

举报

相关推荐

0 条评论