SpringBoot自动装配、@SpringBootApplication注解

目录

SpringBoot自动装配

约定优于配置的主要特点和优势

自动装配的核心-----@SpringBootApplication

@SpringBootConfiguration

@ComponentScan

@EnableAutoConfiguration(核心)

@AutoConfigurationPackage 

@Import(EnableAutoConfigurationImportSelector.class)(最核心)


SpringBoot自动装配

自动装配基于约定优于配置的原则,通过自动检测和配置类来自动配置应用程序所需的各种组件、库和功能。

约定优于配置的主要特点和优势

  1. 简化配置:我们可以直接使用SpringBoot默认提供好的配置,无需自己再进行定义整合,比如之前的Spring的配置文件,SpringMvc的配置文件等,这样就减少了繁琐和重复的配置代码,从而达到简化配置
  2. 开发者友好:通过遵循约定,开发人员可以更快地上手项目,开发者不再需要解释和配置复杂的参数和选项,也可以提高开发效率
  3. 内嵌式容器:应用程序中直接嵌入一个Servlet容器,而不需要外部部署或配置独立的Servlet容器
  4. 默认配置文件:SpringBoot的默认配置文件是application.properties、application.yml或者application.yaml,这些配置文件可以放置在项目根目录下的src/main/resources目录中。Spring Boot会自动读取这些配置文件,并根据其中的配置内容进行相应的应用程序配置。

自动装配的核心-----@SpringBootApplication

@SpringBootApplication注解是SpringBoot启动类上的一个注解
进入注解中可以看到

 除了其他用来修饰注解所需要的注解,还有三个核心注解@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

@SpringBootConfiguration

点进去跟进

发现他有@Configuration注解,应该就能猜到,@SpringBootConfiguration这个注解的功能就是把一个类设置为配置类交给Spring容器管理

@ComponentScan

这个注解的功能是自动扫描该配置类所在的包及其子包,并将标记为组件注解的类(那些标记了@Service,@Controller等)实例化并注册为Spring容器中的Bean,并且还可以通过basePackages等属性来规定扫描的范围

 这样SpringBootApplication注解中就有这样两个属性用来指定扫描的包或者类

@EnableAutoConfiguration(核心)

 这个是SpringBoot最为核心的一个注解

跟进注解 发现有这两个注解

@AutoConfigurationPackage 

继续跟进

@Import用于导入其他配置类或者组件类。它可以被用来在一个配置类中引入其他配置类,以便将它们的配置信息合并到当前的配置中。它的作用,就是注册启动类所在的包和其子包下的所有组件 

跟进Registrar.Class

这个类用于注册Bean定义到Spring容器中。在这里,registerBeanDefinitions方法通过PackageImports类获取到注解元数据中的包名,并将这些包名作为参数调用register方法进行注册

PackageImports类

这段代码的目的是从注解元数据中提取出基础包名信息,之前配置的扫描包路径,在这里也应该明白了

register方法

这段代码的目的是在注册容器中注册指定的基础包名,以供后续的处理和配置使用。

@Import(EnableAutoConfigurationImportSelector.class)(最核心)

借助 EnableAutoConfigurationImportSelector,@EnableAutoConfiguration 可以帮助 SpringBoot 应用将所有符合条件的 @Configuration 配置都加载到当前 SpringBoot 创建并使用的 IoC 容器


跟进EnableAutoConfigurationImportSelector代码看看如何加载到的

 类中有一个getAutoConfigurationEntry方法,接受一个注解元数据作为参数

 跟进这个方法

这段字符串的意思大概是在 META-INF/spring.factory 和
META- INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中找不到自动配置类。如果您使用的是自定义打包,请确保该文件正确无误

看Assert提示的参数能猜到,上面的SpringFactoriesLoader.loadFactoryNamesImportCandidates.load这两个方法就是来加载配置META—INF下的配置文件的

调用 SpringFactoriesLoader.loadFactoryNames() 方法,加载指定类加载器下 META-INF/spring.factories 文件中的配置类名。这些配置类名是通过 getSpringFactoriesLoaderFactoryClass() 方法获取的,该方法可以由子类进行实现和定制

通过获取工厂类型的全限定名 factoryTypeName。 调用 loadSpringFactories() 方法加载类加载器中的 META-INF/spring.factories 文件,并返回一个 Map<String, List<String>> 类型的结果。该结果是一个映射,其中键是工厂类型的全限定名,值是在 spring.factories 文件中找到的相关工厂名列表

如何拿到配置文件呢
调用类加载器的 getResources() 方法加载指定资源路径下的所有资源,并返回一个 Enumeration 对象。该资源路径是 META-INF/spring.factories

 再看一下ImportCandidates.load方法

 其中 %s 是一个占位符,表示在具体使用时将被替换为某个值,也就对应上了META-INF/spring/下符合条件的imports文件,使用时会被替换为全限定名。

具体来说,@EnableAutoConfiguration会根据你的项目中所引入的依赖自动配置Spring应用程序。所以就不需要手动配置太多的东西,Spring Boot会根据你的程序的所使用的依赖自动配置好基本的配置,例如:数据源、日志、Web MVC等。@EnableAutoConfiguration使用Spring Boot的条件化配置特性。它根据应用程序中的依赖和配置确定需要配置哪些组件。这样可以大大简化Spring应用程序的配置过程,并提高开发效率。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米开浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值