Spring Boot 注解

就 Spring Boot 启动的 SpringBootApplication 进行解释。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
  • @SpringBootApplication

    组合了 @SpringBootConfiguration@ComponentScan@EnableAutoConfiguration,是 Spring Boot 项目的入口。

    • @SpringBootConfiguration

      等同于 @Configuration

      • @Configuration

        IOC 容器的配置标签,等同于 Spring 中 <bean></bean> 的配置,@Configuration 标注的就是一个 JavaConfig 的配置类,注册 bean 需要在方法上使用 @Bean 标注

    • @EnableAutoConfiguration

      自动配置,通过 @Import 收集和注册特定场景的 bean 定义。

      • @EnableAutoConfigurationImportSelector

        搜索服务条件的 @Configuration 配置,并加载到 Spring Boot 中,创建并使用 IOC 容器。

      • SpringFactoriesLoader.java

          protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
              List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
              Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
              return configurations;
          }
      

      SpringFactoriesLoader 会加载 META-INF/spring.factories 配置文件,从而加载相应类到 IOC 容器中

    • @ComponentScan

      自动扫描符合条件的组件,如 @Component@Repository 等,也可以通过指定 basePackages 来更细粒度的定制扫描范围。

    graph TD
    A[收集条件和回调接口 ApplicationIntializer/ApplicationListener] --step1 started--> B[准备 Environment]
    B -- step2 environmentPrepared--> C[初始化 ApplicationContext 设置 Enviornment]
    C -- step3 contextPrepared contextLoaded --> D[refresh context 启动完成]
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容