# 特点


它是一个Spring框架的框架,能够简化配置文件,快速构建web应用,内置tomcat,无需打包,直接运行,自动装载Spring。

默认有 resources 文件夹存放配置文件,默认打包方式为 jar。

# 注解


@SpringBootApplication

标注的类为 Spring Boot 的主配置类,Spring Boot 会运行这个类的 main 方法来启动 Spring Boot 应用,本质上是由 3 个注解组成,分别是@Configuration、 @EnableAutoConfiguration、@ComponentScan。

@Configuration

在启动类里面标注了@Configuration,意味着它其实也是一个 IoC 容器的配置类。

@EnableAutoConfiguration

springboot 应用把所有符合条件的@Configuration 配置都加载到当前 SpringBoot 创建并使用的 IoC 容器中。

@ComponentScan

ComponentScan 默认会扫描当前 package 下的的所有加了@Component 、@Repository、@Service、@Controller的类到 IoC 容器中。

# 自动装配原理


spring boot 注解 怎么引用变量 spring boot注解原理_配置文件

 

# Spring boot SPI


  • SPI思想
    系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。
  • SPI约定
    当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。通过这个约定,就不需要把服务放在代码中了,通过模块被装配的时候就可以发现服务类了。
  • springboot中的类SPI扩展机制
    在springboot的自动装配过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,然后将解析properties文件,找到指定名称的配置后返回。需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。