zoukankan      html  css  js  c++  java
  • SpringBoot启动原理

    通过springboot启动类的注解@SpringBootApplication

     关注注解@EnableAutoConfiguration

     点进去看这个类AutoConfigurationImportSelector的selectImports方法

     关注方法getCandidateConfigurations

    再到

      重头戏来了,加载META-INF/spring.factories这个文件

     spring.factories这个文件,这个key: EnableAutoConfiguration对应下的自动配置类都会被加载

    但是这些类是否自动配置,是根据其类上的注解@ConditionalOnClass等等来判断是否生效的

    springboot项目启动时,会扫描所有jar包中的spring.factories文件,从而拿到其需加载的自动配置类,而这些配置类是否真实生效,又根据其类上注解决定

    例如

    数据源DataSource的自动配置 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 

    生效条件是@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) 存在DataSource和EmbeddedDatabaseType

    redis的自动配置org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

    其生效条件是@ConditionalOnClass(RedisOperations.class) 存在RedisOperations

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    当pom中引入spring-boot-starter-data-redis时,RedisAutoConfiguration自动配置类生效会被加载到内存中

     其他mq、mongo等等同理

    未完待续...

  • 相关阅读:
    分治
    递归
    java三大特性之封装
    Java基础知识
    puk2367 拓扑排序
    puk1251 最小生成树
    puk1521 赫夫曼树编码
    DOSbox简单运行操作
    Mybatis初学经验----------------(2)
    mysql存储引擎MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/kobe-lin/p/11838970.html
Copyright © 2011-2022 走看看