您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

SpringBoot自动装配原理

时间:2023-05-08 12:01:08  来源:尚硅谷教育  作者:

前言

我们早期在做Spring项目的时候,需要手动添加很多xml配置,比如整合SpringMVC的配置,开启事务,整合MyBatis等等。这些都需要我们手动编写大量的配置,简直就是配置地狱。

Spring官方也发现了这一个痛点,后面SpringBoot横空出世,解决了这一痛点。SpringBoot基于约定大于配置的理念,根据我们在依赖中的starter,自动的为我们把一些必要的组件装配到IOC容器中,并且这些组件在SpringBoot中基本上都有默认的配置,所以SpringBoot项目在启动的时候才可以为我们自动装配组件。

举个例子:比如我们要在项目中引入redis相关的组件,我们只需要在项目中加入一个Redis相关的starter即可。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

只需要引入这个依赖,我们在项目中就可以使用RedisTemplate 来操作Redis了,不用做任何配置。

因为SpringBoot会默认连接 127.0.0.1:6379 这个服务,当然前提是我们本机启动了Redis服务。这个就是SpringBoot的默认配置,也就是约定。

一、SpringBoot自动装配过程解析

1.1源码分析

SpringBoot项目的启动类上都会有@SpringBootApplication注解,这个注解是一个复合注解。

重点是@EnableAutoConfiguration这个注解,这个注解也是一个复合注解。

@EnableAutoConfiguration注解导入AutoConfigurationImportSelector类,这个类中有一个selectImports()方法。

selectImports(),方法调用了getAutoConfigurationEntry()方法,这个方法里面又有一个关键的方法getCandidateConfigurations()

getCandidateConfigurations()方法借助SpringFactoriesLoader.loadFactoryNames()方法,扫描了所有包含META-INF/spring.factories的jar包,这些jar包实际上就是我们引入的starter中的依赖。

在loadFactoryNames()方法中加载spring.factories文件。

1.2Debug验证

getCandidateConfigurations()的第一行打上断点,然后debug模式启动SpringBoot项目。

我们发现 configurations集合中存储了许多全类名,这些就是SpringBoot帮我们把依赖中的相关的组件装配到了IOC容器中。

比如我们项目中添加了注册中心nacos相关的依赖,可以看到nacos依赖的库中META-INF文件夹中有spring.factories文件,这个文件中定义了一些必要的组件全类名,SpringBoot根据这些就可以利用JAVA的反射机制为我们创建出这些对象,然后放到IOC容器中。

总结

SpringBoot自动装配原理:

  1. @EnableAutoConfiguration注解导入AutoConfigurationImportSelector类。
  2. selectImports方法调用SpringFactoriesLoader.loadFactoryNames()扫描所有jar下面的对应的META-INF/spring.factories文件.
  3. 把所有在spring.factories文件中扫描到的全类名进行实例化加载到IOC容器中。

SpringBoot自动装配说白了就是自动帮我们把第三方的组件装配到IOC容器,不需要再手动的去写Bean相关的配置,因为大多数配置SpringBoot已经帮我们约定好了,也就是约定大于配置的理念。



Tags:SpringBoot   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言我们早期在做Spring项目的时候,需要手动添加很多xml配置,比如整合SpringMVC的配置,开启事务,整合Mybatis等等。这些都需要我们手动编写大量的配置,简直就是配置地狱。Spring...【详细内容】
2023-05-08  Tags: SpringBoot  点击:(0)  评论:(0)  加入收藏
一、前言在现代软件开发中,事务处理是必不可少的一部分。当多个操作需要作为一个整体来执行时,事务可以确保数据的完整性和一致性,并避免出现异常和错误情况。在SpringBoot框架...【详细内容】
2023-04-28  Tags: SpringBoot  点击:(26)  评论:(0)  加入收藏
1 为什么要做接口防刷?如果你的服务器应用,被一些人而已攻击,写入脚本不停的刷服务端的某一个接口,这样服务端的压力聚会非常的,甚至可能给服务端带来灾难,如果是涉及支付相关的...【详细内容】
2023-04-24  Tags: SpringBoot  点击:(37)  评论:(0)  加入收藏
今天要聊的就是「博客管理」中全文搜索的实现,基于 SpringBoot+Vue+ES 实现,先给大家看一下效果: 全文搜索+关键字高亮,是不是和百度的效果差不多,话不多说,直接聊如何实现。 该...【详细内容】
2023-04-15  Tags: SpringBoot  点击:(31)  评论:(0)  加入收藏
前言数据源,实际就是数据库连接池,负责管理数据库连接,在Springboot中,数据源通常以一个bean的形式存在于IOC容器中,也就是我们可以通过依赖注入的方式拿到数据源,然后再从数据源...【详细内容】
2023-04-12  Tags: SpringBoot  点击:(9)  评论:(0)  加入收藏
今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决...【详细内容】
2023-04-12  Tags: SpringBoot  点击:(51)  评论:(0)  加入收藏
前言最近业务部门接手了外包供应商的项目过来自己运维,该部门的小伙伴发现了一个问题,比如后端的DTO有个属性名为nPrice的字段,通过json渲染到前端后,变成nprice,而预期的字段是...【详细内容】
2023-04-04  Tags: SpringBoot  点击:(18)  评论:(0)  加入收藏
在 Spring Boot 中使用 Spring AOP 实现接口鉴权可以帮助我们对接口的调用进行权限控制。下面是一些常见的方法:1 基于注解的方法:在接口方法上添加自定义注解,通过定义切面类...【详细内容】
2023-03-30  Tags: SpringBoot  点击:(70)  评论:(0)  加入收藏
很早以前,我曾写过两篇介绍如何在SpringBoot中使用Guava和Redis实现接口限流的文章。具体包括: 使用Guava实现单机令牌桶限流 使用Redis实现分布式限流现在,一个问题摆在我们面...【详细内容】
2023-03-24  Tags: SpringBoot  点击:(34)  评论:(0)  加入收藏
在如今的关系型数据库中,有两个开源产品是你必须知道的。其中一个是MySQL,相信关注我的小伙伴们一定都不陌生,因为之前的Spring Boot关于关系型数据库的所有例子都是对MySQL来...【详细内容】
2023-03-23  Tags: SpringBoot  点击:(51)  评论:(0)  加入收藏
▌简易百科推荐
今天分享一下【Kubernetes】 DaemonSet 详解,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。三分钟你将学会: DaemonSet是什么? DaemonSet的应用场景 ...【详细内容】
2023-05-08  哪吒编程  微信公众号  Tags:K8S   点击:(8)  评论:(0)  加入收藏
前言我们早期在做Spring项目的时候,需要手动添加很多xml配置,比如整合SpringMVC的配置,开启事务,整合Mybatis等等。这些都需要我们手动编写大量的配置,简直就是配置地狱。Spring...【详细内容】
2023-05-08    尚硅谷教育  Tags:SpringBoot   点击:(0)  评论:(0)  加入收藏
一、需求开发过程需求:前端浏览器请求url: http://localhost:8080/demo/handle01,前端⻚面显示后台服务器的时间开发过程1)配置DispatcherServlet前端控制器2)开发处理具体业务逻...【详细内容】
2023-05-06  日拱一卒程序猿  今日头条  Tags:Spring MVC   点击:(14)  评论:(0)  加入收藏
大家好,我是小米,一个热爱技术分享的程序员。今天我们来谈一下Spring事务传播。在使用Spring进行数据库操作时,我们经常会遇到需要使用事务的情况,而Spring对事务的管理非常方便...【详细内容】
2023-05-06  知其然亦知其所以然    Tags:Spring   点击:(13)  评论:(0)  加入收藏
背景在 Kubernetes 上,从部署 Deployment 到正常提供服务,整个流程可能会出现各种各样问题,有兴趣的可以浏览 Kubernetes Deployment 的故障排查可视化指南(2021 中文版)[1]。...【详细内容】
2023-05-04    云原生指北  Tags:Kubernetes   点击:(22)  评论:(0)  加入收藏
一、Kubernetes的优缺点1、Kubernetes的优点 高可用性:Kubernetes具有自动容错和自动扩缩容等功能,可以保证应用的高可用性。 多种应用类型支持:Kubernetes支持各种应用场景,例...【详细内容】
2023-05-04  哪吒编程  微信公众号  Tags:Kubernetes   点击:(17)  评论:(0)  加入收藏
在本文中,我们将分别用Spring框架和OpenAI的API来搭建一个应用程序,用于生成图像。一、简介1、什么是Spring和OpenAISpring是一个开源的应用程序框架,可用于Java平台上构建企业...【详细内容】
2023-04-27  哪吒编程  微信公众号  Tags:Spring   点击:(17)  评论:(0)  加入收藏
假设我们有一个电商项目,其中涉及到订单的处理。在订单支付后,我们需要发送订单消息到 RabbitMQ 进行异步处理。为了处理可能出现的处理失败情况,我们可以使用延迟队列、重试队...【详细内容】
2023-04-27  知其然亦知其所以然  今日头条  Tags:RabbitMQ   点击:(14)  评论:(0)  加入收藏
一、一级缓存1、在⼀个sqlSession中,对User表根据id进行两次查询,查看他们发出sql语句的情况。2、同样是对user表进⾏两次查询,只不过两次查询之间进⾏了⼀次update操作。3、总...【详细内容】
2023-04-27  日拱一卒程序猿  今日头条  Tags:MyBatis   点击:(17)  评论:(0)  加入收藏
【编者按】在开源与人工智能的灿烂星河里,贾扬清的名字都格外地耀眼。因为导师 Trevor Darrell 教授的一句“你是想多花时间写一篇大家估计不是很在意的毕业论文,还是写一个将...【详细内容】
2023-04-27    CSDN  Tags:AI 框架   点击:(14)  评论:(0)  加入收藏
站内最新
站内热门
站内头条