SpringBoot3.0.1自动装配

SpringBoot的自动装配是SpringBoot的核心,而SpringBoot的启动类上的@SpringBootApplication注解中包括@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解,其中@EnableAutoConfiguration就是自动装配的核心注解。

@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}
)}
)
public @interface SpringBootApplication {
}

对@EnableAutoConfiguration进行跟踪,@Import({AutoConfigurationImportSelector.class})就是负责自动装配。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

跟踪AutoConfigurationImportSelector.class,其中有个getAutoConfigurationEntry方法,用于自动获取配置了类信息。

protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return EMPTY_ENTRY;
        } else {
            AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
            List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
            configurations = this.removeDuplicates(configurations);
            Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);
            this.checkExcludedClasses(configurations, exclusions);
            configurations.removeAll(exclusions);
            configurations = this.getConfigurationClassFilter().filter(configurations);
            this.fireAutoConfigurationImportEvents(configurations, exclusions);
            return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);
        }
    }

其中getCandidateConfigurations方法用于获取候选配置

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).getCandidates();
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

其中的ImportCandidates.load方法解析出配置文件的路径"META-INF/spring/%s.imports",也就是spring-boot-autoconfigure包下的META-INF下的spring中的org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

文件中就包括了自动加载的类,在具体的装配时,会进行条件判断,符合了才会自动装配,也就是判断项目中是否真的引入了依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenAPI 3.0.1是一种用于描述和定义RESTful API的规范。它提供了一种标准的方式来描述API的端点、参数、请求和响应等信息。根据提供的引用内容,可以看出在后端项目中,通过使用OpenAPI 3.0.1规范的依赖包和插件,可以将JSON文件转换为OpenAPI 3.0.1格式的文档,并通过访问相应的接口来展示API页面。具体的使用方式是引入依赖包org.microprofile-ext.openapi-ext的openapi-ui版本1.1.5,并在项目启动后访问http://localhost:8080/xxx/openapi-ui接口来查看API页面。这个接口实际上是先访问http://localhost:8080/openapi接口获取OpenAPI文档,然后通过ui插件OpenApiUiService进行渲染展示到页面上。更多详细信息可以参考提供的引用内容中的博主的文章。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [OpenApi3对象与类定义,JSONObject,json文件之间的转换。](https://blog.csdn.net/u012196940/article/details/123396252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [OpenAPI指南](https://blog.csdn.net/xiaoyi52/article/details/121198620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值