自动装配

pom.xml

  • spring-boot-dependence:核心都依赖在父类工程中!
  • 我们在写入或者引入springboot依赖的时候,不需要指定版,因为有这些仓库的版本

启动器:------spring boot的启动场景

  • 比如spring-boot-starter-web,他就会帮我们导入web环境苏需要的依赖。
  • springboot会将所有的功能场景,都变成一个个启动器。
  • 我们使用什么功能,只需要找到对应的启动器(starter)就可以了

主程序:

//springbootApplication:标注这个类是一个springboot的应用,启动类下的所有资源被导入
@SpringBootApplication
public class HuangApplication { public static void main(String[] args) {
SpringApplication.run(HuangApplication.class, args);
} }

注解:

@SpringBootConfiguration:springboot的配置
@Configuration: sring配置类
@@Component:说明这也是一个spring的组件 @@EnableAutoConfiguration: 自动配置
@AutoConfigurationPackage:自动配置
@Import(AutoConfigurationPackages.Registrar.class):导入选择器
@Import({AutoConfigurationImportSelector.class}):自动导入选择
//获取所有的配置
List<String>configurations=this.getCandidateConfigurations(annotationMetadata, attributes);

获取候选的配置:

protectedList<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor 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;

自动配置的核心:

META-INF/spring.factories

Properties properties = PropertiessloaderUtils.loadProperties(resource);
所有资源加载到配置类中!

结论

​ springboot所有的自动配置都是在启动的时候扫描并加载:spring.factoriess所有的自动配置类都在这里面,但不一定全部启动,要判断条件是否成立,只要导入对应的start,就有对应的启动器了,有了启动器,我们的自动装配就会生效,然后配置就会成功。

大概步骤

1.

spring boot在启动的时候,从路径下/META-INF/spring.factories获取指定的值。

2.

将这些自动配置的类导入容器,自动配置就会生效,进行自动配置。

3.

以前我们需要自动配置的东西,现在都在springboot帮我们做。

4.

整合javaEE,解决方案和自动装配的东西都在spring-boot-autofigure- 2.7.11.RELEASE.JAR这个包下面

5.

他会把所有需要导入的组件,以类的方式返回,这些组件就会被添加到容器。

6.

容器中也会存在非常多的xxxAutoConfiguration的文件(@bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动配置。

代码表示(自动配置原理)

springboot自动装配大概原理的更多相关文章

  1. SpringBoot 自动装配的原理分析

    关于 SpringBoot 的自动装配功能,相信是每一个 Java 程序员天天都会用到的一个功能,但是它究竟是如何实现的呢?今天阿粉来带大家看一下. 自动装配案例 首先我们通过一个案例来看一下自动装配 ...

  2. SpringBoot自动装配的原理

    1.SpringApplication.run(AppConfig.class,args);执行流程中有refreshContext(context);这句话. 2.refreshContext(co ...

  3. SpringBoot自动装配原理解析

    本文包含:SpringBoot的自动配置原理及如何自定义SpringBootStar等 我们知道,在使用SpringBoot的时候,我们只需要如下方式即可直接启动一个Web程序: @SpringBoo ...

  4. springboot自动装配原理

    最近开始学习spring源码,看各种文章的时候看到了springboot自动装配实现原理.用自己的话简单概括下. 首先打开一个基本的springboot项目,点进去@SpringBootApplica ...

  5. SpringBoot启动流程分析(五):SpringBoot自动装配原理实现

    SpringBoot系列文章简介 SpringBoot源码阅读辅助篇: Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一) ...

  6. springboot自动装配原理,写一个自己的start

    springboot自动装配原理 第一次使用springboot的时候,都感觉很神奇.只要加入一个maven的依赖,写几行配置,就能注入redisTemple,rabbitmqTemple等对象. 这 ...

  7. Springboot自动装配源码及启动原理理解

    Springboot自动装配源码及启动原理理解 springboot版本:2.2.2 传统的Spring框架实现一个Web服务,需要导入各种依赖JAR包,然后编写对应的XML配置文件 等,相较而言,S ...

  8. 【Springboot】Springboot自动装配原理

    1.核心注解就是 EnableAutoConfiguration  该注解会激活SpringBoot的自动装配功能: 代码如下: @Target(ElementType.TYPE) @Retentio ...

  9. springboot自动装配

    Spring Boot自动配置原理 springboot自动装配 springboot配置文件 Spring Boot的出现,得益于“习惯优于配置”的理念,没有繁琐的配置.难以集成的内容(大多数流行第 ...

  10. 一步步从Spring Framework装配掌握SpringBoot自动装配

    目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...

随机推荐

  1. The Little Book of Rust Books

    https://lborb.github.io/book/title-page.html https://blog.logrocket.com/unsafe-rust-how-and-when-not ...

  2. NFS只能挂载为nobody的解决办法

    方法一 mount中指定参数 mount -t nfs -o vers=3 192.168.23.23:/data1 /data1 这种方法不推荐,但可以解决临时挂载的需求 方法二 cat /etc/ ...

  3. jmeter--负载测试

    负载测试 1. jmeter插件处理 2. 下载负载测试计划所需要插件 3. 负载测试计划 4. 波浪形的测试计划--测试服务器的稳定性 一般用于测试稳定的场景测试(有规律的活动/场景/接口请求等等, ...

  4. Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number

    IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>( ...

  5. ls和mkdir

    ls  查看当前目录的内容 1) ls -l 显示详细列表 2) Ls -lh 吧文件大小以人性化的方式展开 3) ls -a 显示所有的文件,包括隐藏文件,隐藏文件是已.开头的文件 4) ll 等于 ...

  6. DRF提供的请求与响应类

    一 内容协商 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个视图子类出来提供给我们使用. Dja ...

  7. AttributeError: module 'torch._six' has no attribute 'PY3'

    修改:进到torch._six源码,看看里面是PY的哪个对象,修改成这对象名试试 _six.py 即将PY3修改为PY37

  8. ServletConfig接口介绍

    前言: Servlet 容器初始化 Servlet 时,会为这个 Servlet 创建一个 ServletConfig 对象,并将 ServletConfig 对象作为参数传递给 Servlet .通 ...

  9. 11.4 显示窗口(harib08d)11.5 小实验(hearib08e) 11.6 高速计数器(harib08f)

    11.4 显示窗口(harib08d) 书P206 11.5 小实验(hearib08e) 书P208 11.6 高速计数器(harib08f) 书P209

  10. 使用sync.Once实现高效的单例模式

    1. 简介 本文介绍使用sync.Once来实现单例模式,包括单例模式的定义,以及使用sync.Once实现单例模式的示例,同时也比较了其他单例模式的实现.最后以一个开源框架中使用sync.Once实 ...