第九章 SpringBoot 自动配置原理 入门

这篇具有很好参考价值的文章主要介绍了第九章 SpringBoot 自动配置原理 入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 引导加载自动配置类

@SpringBootApplication

-- @SpringBootConfiguration

-- @EnableAutoConfiguration

-- @ComponentScan

//@SpringBootApplication

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{}
1.1 @SpringBootConfiguration

@Configuration。代表当前是一个配置类

1.2 @ComponentScan

指定扫描哪些,Spring注解;

1.3 @EnableAutoConfiguration

@EnableAutoConfiguration

-- @AutoConfigurationPackage

-- @Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}
1.3.1 @AutoConfigurationPackage

@AutoConfigurationPackage

-- @Import(AutoConfigurationPackages.Registrar.class)

自动配置包 , 指定了默认的包规则(扫描启动类包下的组件)文章来源地址https://www.toymoban.com/news/detail-641688.html

@Import(AutoConfigurationPackages.Registrar.class)  //给容器中导入一个组件
public @interface AutoConfigurationPackage {}

//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来?MainApplication 所在包下。

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

		@Override
		public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
			// 1、当前启动类目录下的组件注册
            register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));
        }
}

//2、构造器再默认加载basePackages和basePackageClasses下面的组件注册
PackageImports(AnnotationMetadata metadata) {
			AnnotationAttributes attributes = AnnotationAttributes
					.fromMap(metadata.getAnnotationAttributes(AutoConfigurationPackage.class.getName(), false));
			List<String> packageNames = new ArrayList<>();
    		// 获取
			for (String basePackage : attributes.getStringArray("basePackages")) {
				packageNames.add(basePackage);
			}
			for (Class<?> basePackageClass : attributes.getClassArray("basePackageClasses")) {
				packageNames.add(basePackageClass.getPackage().getName());
			}
			if (packageNames.isEmpty()) {
				packageNames.add(ClassUtils.getPackageName(metadata.getClassName()));
			}
			this.packageNames = Collections.unmodifiableList(packageNames);
		}
1.3.2 @Import(AutoConfigurationImportSelector.class)
1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
	默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
1.3.3

到了这里,关于第九章 SpringBoot 自动配置原理 入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF入门到跪下 第九章 MVVM-跨模块交互

    在实际开发过程中,经常会遇到多个窗口对象,随之而来的就是对应的多个ViewModel对象,这些对象在一定条件下会发生相互访问的情况,例如VM与不同窗口交互、VM与不同VM交互,这些不同模块对象之间的交互,就是跨模块交互。 MVVM模式下跨模块交互解决方案 面对跨模块交互

    2024年02月02日
    浏览(29)
  • C++从入门到精通 第九章(继承和多态)【下】

    (1)一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务,这就是多态性。 (2)在C++中,多态性可分为编译时的多态性(静态多态)和运行时的多态性(动态多态),编译时的多态性是通过函数重载和模板体现的,运行时的多态性是

    2024年02月21日
    浏览(31)
  • WPF入门到跪下 第九章 MVVM-基本数据处理

    MVVM是Model-View-ViewModel的缩写。mvvm是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI展现出来,ViewModel是一个同步View和Model的对象。 在MVVM架构下,View和Model之间没有直接的联系,它们通过Vie

    2024年01月21日
    浏览(36)
  • 计算机组成原理 | 第九章:控制单元的功能 | 微操作命令 | 时钟周期

    假设完成一条指令分为4个工作周期:取指周期、间址周期、执行周期、中断周期 ①现行指令地址送至存储器地址寄存器,记作 PC → MAR ②向主存发送 读命令 ,启动主存做读操作,记作 1 → R ③将MAR(通过地址总线)所指的主存单元中的内容( 指令 )经数据总线读至MDR内,

    2024年02月13日
    浏览(42)
  • 小黑子—Java从入门到入土过程:第九章-IO流

    IO流:存储和读取数据的解决方案 比如: 在玩游戏的时候,游戏进度的数据是保存在内存当中的 内存中的数据特点就是不能永久化的存储程序,程序停止,数据丢失 这时就需要添加一个存档功能,在存储的过程当中就是把数据保存到文件当中 想实现以上: 要知道文件在哪

    2024年02月04日
    浏览(26)
  • EXCEL VBA从入门到精通 第九章:Excel VBA高级编程技巧

    介绍Excel VBA中的API编程,以及如何利用它们来访问Windows系统的功能。 Excel VBA提供了访问Windows系统API的功能,通过调用API函数可以访问Windows系统底层的功能和资源,例如操作系统、文件系统、网络、注册表等。API函数可以是Windows操作系统内置的函数,也可以是Windows DLL文件中

    2024年02月02日
    浏览(34)
  • Windows下的Spark环境配置(含IDEA创建工程--《Spark大数据技术与应用》第九章-菜品推荐项目)

    本文适用于《Spark大数据技术与应用》第九章-菜品推荐项目环境配置:` 跟着做就行… 资源都在网盘里面,纯粹的无脑配置… 提示:以下是本篇文章正文内容,所用资源版本过低,用于课本实验 ,且已有Java环境 scala:2.12.8 spark:1.6.2 hadoop:2.6.4 hadoop启动文件exe JAVA 如果按照

    2024年02月09日
    浏览(41)
  • Springboot启动原理和自动配置原理

    关于 springboot 启动流程和配置原理 很久就写了,不过没有详细补充 ,现在补充 —— 2023-08-05 BootstrapRegistryInitializer 是一个函数是接口 org.springframework.boot.BootstrapRegistry 接口 getSpringFactoriesInstances 加载工厂中组件实现方式 org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFacto

    2023年04月25日
    浏览(31)
  • SpringBoot原理-自动配置-原理分析-源码跟踪

    SpringBootApplication 该注解标识在SpringBoot项目的启动类上,是SpringBoot中 最为重要 的注解,该注解由三个部分组成。 @SpringBootConfiguration:该注解与@Configuration注解作用一样,用来声明当前类为一个配置类 @ComponentScan:组件扫描,默认扫描当前启动类所在包及其子包 @EnableAutoConf

    2024年02月09日
    浏览(33)
  • SpringBoot 自动配置原理

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包