首页 > 其他分享 >什么是Spring的依赖注入(Dependency Injection,简称DI)?

什么是Spring的依赖注入(Dependency Injection,简称DI)?

时间:2023-12-13 11:32:09浏览次数:28  
标签:容器 依赖 DI 对象 Spring Dependency 开发者 Setter 注入


控制反转IoC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找

依赖注入:相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入(Dependency
Injection),即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。


Spring的依赖注入(Dependency Injection,简称DI)是指通过外部容器在对象之间建立依赖关系的一种设计模式和实现方式。在传统的编程模式中,对象通常通过自身创建和管理其依赖对象,导致对象间的紧耦合关系和难以维护的代码。而依赖注入则将对象的依赖关系交由外部容器来管理,从而解耦对象之间的关系,提高代码的可维护性和灵活性。

具体来说,依赖注入通过容器将对象所依赖的其他对象(称为依赖项)注入到对象中,而不是在对象内部主动创建或查找依赖项。这样,对象只需要关注自身的核心业务逻辑,而不需要关心依赖对象的创建和管理。

Spring框架提供了多种方式来实现依赖注入:

  1. 构造函数注入:通过对象的构造函数来接收依赖项。开发者可以在对象的构造函数中声明依赖项的参数,容器会在创建对象时自动解析并提供相应的依赖项。
  2. Setter方法注入:通过对象的Setter方法来设置依赖项。开发者可以在对象中定义与依赖项对应的Setter方法,容器会在创建对象后调用Setter方法并设置相应的依赖项。
  3. 字段注入:通过对象的字段来直接注入依赖项。开发者可以在对象中声明与依赖项对应的字段,并通过注解或配置将依赖项注入到字段中。
  4. 接口注入:通过实现接口来接收依赖项。开发者可以在对象中实现特定的接口,并将依赖项作为接口的方法参数,容器会自动将相应的依赖项传递给对象。

通过依赖注入,开发者可以更好地实现面向接口和松耦合的设计,提高代码的可测试性和可扩展性。同时,依赖注入还支持依赖项的动态替换和配置,使得系统更加灵活和可配置化。


标签:容器,依赖,DI,对象,Spring,Dependency,开发者,Setter,注入
From: https://blog.51cto.com/zhangxueliang/8799863

相关文章

  • spring ApplicationContext通常的实现是什么?
    FileSystemXmlApplicationContext:此容器从一个XML文件中加载beans的定义,XMLBean配置文件的全路径名必须提供给它的构造函数。ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。WebXmlA......
  • Redis
    入门Redis是一种基于Key-Value键值对的在内存数据库。版本号第二位是奇数则是非稳定版本,偶数则为稳定版本。常用命令命令作用redis-server/myredis/redis7.conf启动Redisredis-cli-a159123zxc-p6379连接Redisquit退出Redis界面,此时Redis仍在运行shu......
  • SpringBoot3
    入门创建项目<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version></parent>导入场景,选择对应的场景启动器<dependencies><d......
  • SpringBoot2
    概述SpringBoot是整合Spring技术栈的一站式框架。SpringBoot是简化Spring技术栈的快速开发脚手架。优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XML入......
  • SpringCloud
    简介SpringCloud和SpringBoot之间有严格的版本对应关系,因此要小心选择版本,应该根据SpringCloud版本选择SpringBoot版本。本次课程选择SpringCloud的Hoxton.SR1版本,SpringBoot采用2.2.2.RELEASE版本,SpringCloudalibaba采用2.1.0.RELEASE版本。零基础部分父工程搭建Maven使用......
  • Spring6教程
    入门使用Maven引入Spring6基础依赖环境:<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version>......
  • SpringMVC教程
    概述本次项目以SpringMVC为主,使用Maven和themleaf,themleaf是一种模板引擎,主要用来编写动态页面。MVC概念MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分。M:Model,模型层,指工程中的JavaBean,作用是处理数据。JavaBean分为两类:一类称为实体类Bean:专门存储业务数据的,......
  • 使用Visual Studio 2022 创建lib和dll并使用
    对于一个经常写javaWeb的人来说,使用VisualStudio似乎没什么必要,但是对于使用ffi的人来说,使用c或c++编译器,似乎是必不可少的,下面我将讲述如何用VisualStudio2022来创建lib和dll,并使用。静态库的创建并使用首先打开VisualStudio2022,点击创建新项目。选择静态库,然后点击下......
  • 富文本编辑器:Vue整合wangEditor
    最近在做项目时,客户有个发布新闻动态的功能,具体页面内容让客户自己编写,所以要选择富文本编辑器,这样用户体验好一点。网上有很多的富文本编辑器,因为项目的功能并不是很复杂,所以选择了wangEditor,界面简洁,使用起来也挺方便的;实现思路1.安装wangEditor2.封装成组件3.父组件中直接调......
  • Redis内存分析工具-RDBtools安装&使用
    目录是什么安装安装Python(已安装忽略,低版本需要卸载重安)安装GCC(已安装忽略)安装rdbtools和python-lzf安装成功页面基础命令常用示例查找大key与处理导出CVS文件直连Redis服务查询单个key详情生成HTML图表更多用法见Help是什么Rdbtools提供了一组工具,可以帮助用户分析、导入和转换......