当前位置: 首页 > news >正文

SpringBoot的IOC和DI学习

前文

1.IOC的理论
IOC(Inversion of Control,控制反转)是一种设计思想,其核心是将对象的创建、管理和依赖关系的控制权从应用程序代码转移到外部容器(如 Spring 的 IOC 容器)。

传统程序设计中,对象的创建和依赖关系由开发者手动控制(例如通过new关键字创建对象,并手动组装依赖),导致代码耦合度高、灵活性差。
IOC 思想下,开发者只需定义对象的 “蓝图”(如类、接口),并通过配置或注解告知容器需要管理哪些对象;容器会负责对象的创建、初始化、生命周期管理,以及对象之间依赖关系的维护。
本质是 “反转了对象的控制权”:从 “开发者主动控制” 变为 “容器被动提供”,降低了代码间的耦合度,提高了可扩展性和可维护性。
2.DI的理论
DI(Dependency Injection,依赖注入)是 IOC 思想的具体实现方式,指容器在创建对象时,自动将该对象所依赖的其他对象(依赖)注入到其中,无需开发者手动通过new或setter方法设置依赖。

核心目的:解决对象之间的依赖关系,避免硬编码耦合。
常见注入方式:
字段注入(通过@Autowired等注解直接标注字段);
构造函数注入(通过构造方法参数传递依赖);
Setter 方法注入(通过 Setter 方法传递依赖)。

3.最后结合以下代码截屏对这两个知识点的理解

IOC 的体现:对象由容器管理

在代码中,Spring 容器通过注解(@Repository、@Service、@RestController)识别需要管理的对象,并负责其创建和生命周期:

  1. UserDaoimpl类上标注@Repository:告知 Spring 容器这是一个数据访问层的 Bean,容器会自动创建该类的实例并管理。
@Repository  // 将当前类交给IOC容器管理
public class UserDaoimpl implements UserDao { ... }
  1. UserServicelmpl类上标注@Service:告知 Spring 容器这是一个业务逻辑层的 Bean,容器会自动创建其实例。
@Service // 将当前类交给IOC容器管理
public class UserServicelmpl implements UserService { ... }
  1. UserController类上标注@RestController:告知 Spring 容器这是一个控制器 Bean,容器会自动创建其实例。
@RestController
public class UserController { ... }

这些类无需开发者通过new手动创建(例如传统方式的UserDao userDao = new UserDaoimpl()),而是由 Spring 容器统一创建和管理,体现了 “控制反转”

DI 的体现:自动注入依赖

代码中通过@Autowired注解实现依赖注入,容器会自动将依赖的 Bean 注入到目标对象中:

  1. UserServicelmpl依赖UserDao:通过@Autowired注解,Spring 容器会自动从容器中查找UserDao类型的 Bean(即UserDaoimpl的实例),并注入到userDao字段中,无需手动创建UserDao实例。
@Service
public class UserServicelmpl implements UserService {@Autowired // 容器自动注入UserDao类型的Beanprivate UserDao userDao; ...
}
  1. UserController依赖UserService:同样通过@Autowired,容器自动将UserServicelmpl的实例注入到userService字段中,无需手动创建UserService实例。
@RestController
public class UserController {@Autowired // 容器自动注入UserService类型的Beanprivate UserService userService;...
}

通过依赖注入,UserServicelmpl无需关心UserDao的创建细节,UserController也无需关心UserService的创建细节,只需声明依赖即可,极大降低了类之间的耦合度,体现了 DI 的核心思想。

最后总结

1.IOC 是 “让容器管理对象” 的思想,通过@Repository、@Service等注解将对象交给 Spring 容器控制;
2. DI 是 IOC 的实现手段,通过@Autowired等方式自动注入依赖,解决对象间的耦合问题。
3. 代码中,容器管理UserDao、UserService、UserController的创建,并通过依赖注入自动组装它们的关系,最终实现了 “开发者只关注业务逻辑,不关心对象创建和依赖管理” 的目标。

http://www.dtcms.com/a/486765.html

相关文章:

  • 《道德经》第十七章
  • 长宁区网站制作设计wordpress添加微信分享功能
  • vue做pc网站某网站seo诊断分析和优化方案
  • AWS MSK IAM 认证访问权限配置指南
  • 郑州网站制作价格网站做线
  • Code2Video: 代码驱动生成教育视频
  • 【Qt】7.信号和槽_connect函数用法(1)
  • 【成功案例分享】手腕鼓包?不痛不痒?我的腱鞘囊肿15天自愈实战记录
  • gcc: 函数调用优化一例,在栈里找不到函数调用的影子;gdb
  • Navicat Premium 与金仓数据库融合实践:高效管理国产数据库新方案
  • 高光谱成像在种子品种、种子纯度、种子活力鉴别的研究进展
  • 怎样在网上建网站做电商生意网站抓取压力高
  • 陕西网站建设开发企业网站搜索优化外
  • 校园网站建设初探论文南山品牌网站建设企业
  • Apache Spark算法开发指导-特征转换TargetEncoder
  • spark热点key导致的数据倾斜复现和加盐处理
  • Chrominum的技术架构
  • 青岛网站域名备案查询佛山市企业网站建设哪家好
  • 目标检测:从定义到实战关键技术
  • 如何利用AOP实现业务层接口的执行效率
  • 废家电回收小程序:绿色生活与智慧服务的前端功能创新
  • Fast DDS简介
  • 做数据的网站有哪些内容乐陵seo公司
  • 大数据平台安全指南——大数据平台安全架构全景:从认证授权到数据治理的企业级实践指南——认证、授权、审计、加密四大支柱
  • 管理员网站上海有哪些做网站
  • C盘深度清理指南
  • Android 中 RecyclerView 与 ListView 的深度对比:从设计到实践
  • 中网互联网站建设装修网站免费设计
  • SSH安全操作:nftables避坑指南
  • 重庆网站建设咨询wordpress访问非常慢