spring-boot 依赖注入流程

这篇具有很好参考价值的文章主要介绍了spring-boot 依赖注入流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基本使用
  • 主要是三个注解的使用,@Autowired,@Value,@Resource
二、实现步骤
  1. 拦截bean的创建
    要想拦截bean,就需要处理spring bean生命周期事件,spring通过一些接口来处理事件,实现属性注入,需要 InstantiationAwareBeanPostProcessor接口来完成。
  2. 找到注解的字段,并注入值
    获取被注解bean,然后从bean容器中中寻找响应类型的bean注入。
三、@Autowired,@Value是如何实现的
  1. 拦截bean的创建
    • AutowiredAnnotationBeanPostProcessor实现了InstantiationAwareBeanPostProcessor接口
    • spring-boot 在启动的时候向容器中注入了AutowiredAnnotationBeanPostProcessor
  1. 找到注解的字段,并注入值
    • 通过AutowiredAnnotationBeanPostProcessor.postProcessProperties()和AutowiredAnnotationBeanPostProcessor.postProcessMergedBeanDefinition()两个方法完成
    • 每一个需要依赖注入的bean都被封装成了InjectionMetadata对象,每个要备注入的字段被封装成了AutowiredFieldElement对象
三、@Resource是如何实现的
  1. 拦截bean的创建
    • CommonAnnotationBeanPostProcessor实现了InstantiationAwareBeanPostProcessor接口
    • spring-boot 在启动的时候向容器中注入了CommonAnnotationBeanPostProcessor
  1. 找到注解的字段,并注入值
    • CommonAnnotationBeanPostProcessor.postProcessProperties()和CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition()两个方法完成
    • 每一个需要依赖注入的bean都被封装成了InjectionMetadata对象,每个要备注入的字段被封装成了ResourceElement对象

文章来源地址https://www.toymoban.com/news/detail-438805.html

到了这里,关于spring-boot 依赖注入流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring-boot context.initializer.classes 配置的使用

    在Spring Boot中, context.initializer.classes 是一个属性,允许你在 application.properties 或 application.yml 配置文件中指定一个或多个实现 ApplicationContextInitializer 接口的类。这些类可以在Spring应用上下文初始化之前执行一些自定义的初始化逻辑。 以下是一个使用 context.initializer.classes 属性

    2024年04月11日
    浏览(40)
  • kafka--技术文档--spring-boot集成基础简单使用

            查阅了很多资料了解到,使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意! 核心配置为: 如果在下面规定了spring-boot的版本那么就不需要再使用版本号,如

    2024年02月11日
    浏览(46)
  • Grafana+Prometheus技术文档-进阶使用-监控spring-boot项目

    阿丹:         之前已经实现了使用Prometheus来对服务器进行了监控和仪表盘的创建,现在就需要对这些监控方法使用在spring-boot中去。         1、集成Actuator         2、加入Prometheus的依赖         3、配置开放端口、以及开放监控         4、配置Prometheus中的配置      

    2024年02月13日
    浏览(46)
  • MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查

    阿丹:         之前学习了在MongoDB客户端上的MongoDB语句现在将MongoDB整合到spring项目。 MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客 MongoDB文档--基本安装-linu

    2024年02月14日
    浏览(45)
  • spring-boot 请求参数校验:注解 @Validated 的使用、手动校验、自定义校验

    spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。 spring-boot已经引入了基础包,所以直接使用就可以。 在属性上添加校验注解: 在Controller上添加 @Validated 注解 校验未通过时,可能看到: 在 @Validated 后面紧跟着追加BindingResult,

    2023年04月16日
    浏览(104)
  • MQTT协议-EMQX技术文档-spring-boot整合使用--发送接收-消费

    MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的通信协议,它与MQ(Message Queue,消息队列)有一定的关联,但二者并不完全相同。 MQTT是一种轻量级的通信协议,专门为在物联网(IoT)设备之间的消息传递而设计。它运行在TCP协议之上,以“发布-订阅”模式进行

    2024年02月12日
    浏览(37)
  • Hbase-技术文档-spring-boot整合使用hbase--简单操作增删改查--提供封装高可用的模版类

    使用spring-boot项目来整合使用hbase。 依赖声明表示将把Apache HBase客户端库的2.4.3版本添加到项目中。HBase是一个分布式、可扩展的大数据存储系统,它基于Google的Bigtable模型,并使用了Hadoop分布式文件系统作为底层存储。HBase客户端库是用于与HBase数据库进行交互的工具库,提供

    2024年02月07日
    浏览(40)
  • spring-boot定时任务

    定时任务规则:0  *  *  * ? *  * 表示任意月的任意周的每天的每时的每分的0秒开始一次任务。 任务加在方法上  开始一次任务 表示 启动 一次方法。 0/5 *  *  5  *  4  表示 每月的最后一周的第五天的任意时任意分的0秒开始 每隔5秒启动一次任务。 定时任务表达式 还有很

    2024年01月21日
    浏览(54)
  • 使用 Spring 实现控制反转和依赖注入

    在本文中,我们将介绍 IoC (控制反转)和 DI (依赖注入)的概念,以及如何在 Spring 框架中实现它们。 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。 与传统编程相比,传统编程中我

    2024年02月13日
    浏览(35)
  • Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

    spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大

    2024年02月16日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包