当前位置:网站首页>什么是依赖注入(DI)
什么是依赖注入(DI)
2022-07-06 23:34:00 【PIKapikaaaa】
DI的全称是Dependency Injection,中文称之为依赖注入。
它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。对于一个Spring初学者来说,这两种称呼很难理解,下面我们将通过简单的语言来描述这两个概念。
当某个Java对象(调用者)需要调用另一个Java对象(被调用者,即被依赖对象)时,在传统模式下,调用者通常会采用“new 被调用者”的代码方式来创建对象,如图1所示。这种方式会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护。
图1 调用者创建被调用者对象
在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转。
从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入,如图2所示。
图2 将被调用者对象注入调用者对象
边栏推荐
猜你喜欢
基于 hugging face 预训练模型的实体识别智能标注方案:生成doccano要求json格式
漏电继电器JOLX-GS62零序孔径Φ100
SQL injection - secondary injection and multi statement injection
Is the human body sensor easy to use? How to use it? Which do you buy between aqara green rice and Xiaomi
Life experience of an update statement
【js组件】自定义select
高压漏电继电器BLD-20
A cool "ghost" console tool
Safe landing practice of software supply chain under salesforce containerized ISV scenario
PMP证书有没有必要续期?
随机推荐
Record a pressure measurement experience summary
qt 简单布局 盒子模型 加弹簧
模拟线程通信
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
Under the trend of Micah, orebo and apple homekit, how does zhiting stand out?
Sorry, I've learned a lesson
SQL injection cookie injection
Senior programmers must know and master. This article explains in detail the principle of MySQL master-slave synchronization, and recommends collecting
Is it necessary to renew the PMP certificate?
Complete code of C language neural network and its meaning
Torch optimizer small parsing
Two methods of thread synchronization
漏电继电器LLJ-100FS
How can project managers counter attack with NPDP certificates? Look here
Aidl and service
最长回文子串(动态规划)
Phenomenon analysis when Autowired annotation is used for list
DBSync新增对MongoDB、ES的支持
高级程序员必知必会,一文详解MySQL主从同步原理,推荐收藏
Vector and class copy constructors