Spring学习第一课 - 什么是IOC?什么是DI?

本文介绍了InversionofControl(IOC)和DependencyInjection(DI)的概念,讨论了如何通过Spring框架实现对象的松散耦合和依赖注入,以及它们如何提高代码的灵活性和可维护性。通过对比传统方式和Spring框架下的例子,展示了依赖注入如何简化对象创建过程和减少代码复杂度。
摘要由CSDN通过智能技术生成

前言

  • 还没想好要按照什么方式来写,先开个头吧,理解到哪里写哪里😝😝😝😂😂😂
  • 也是初学者,想了解整理哪块知识,可以留言一起来探讨哦🌹🌹🌹
  • 那就开始吧。先对简称做个记录吧~~
简称全称
IOCInversion of Control控制反转
DIDependency injection依赖注入
DAOData Access Object数据访问对象
POPersisent Object持久化对象
POJOPlain Old Java Object普通java对象
ORMObject/Relational Mapping对象关系映射
VOView Object视图对象
BOBusiness Object业务对象
DTOData Transfer Object数据传输对象

ICO:[Inversion of Control] 控制反转

  • 什么是IOC?
    • 它是一种设计思想。当某个对象(调用者,A)需要调用另一个java对象(被调用者,即被依赖对象,B)时:
      在这里插入图片描述
      • 传统方式
        • 【使用方式】:A通常采用“new B”“new C”的代码方式来创建对象,而B和C也得“new D”“new E”“new F”
        • 【 缺点】:A与B之间的耦合性增加,不利于后期项目的升级和维护
      • spring 模式
        • 【使用方法】:对象的实例不再是手动new了,将这个控制权交给了Spring框架来管理,由Spring来负责控制对象的生命周期(如创建、销毁)和对象之间的依赖关系

          IOC由专门的容器来帮忙创建对象,将所有的类都放在Spring容器中。当我们需要某个对象的时候,不再需要自己主动去new,只需告诉Spring容器,然后spring就会把对应的对象返回给你)

        • 【优点】1、 对象与对象之间是松散耦合,使程序整个体系结构变得非常灵活;2、增大了项目的可维护性,降低了开发难度

          1、有了Spring IOC后,创建和查找依赖对象的控制权交给了容器,由容器进行依赖对象的注入,所以对象与对象之前是松散耦合,有利于功能复用,会使程序整个体系结构变得非常灵活。
          2、IOC容器就是一个工厂,当我们需要创建一个对象的时候,只需要配置好配置文件(xml)或注解(annotation)即可,完全不用考虑对象是如何被创建出来的(不需要去new B~F)。如下图中,A类依赖了多个,A的子类中又依赖了多个,我们需要搞清楚所有的依赖对象的构造方法。使用Springk框架之后,我们只需要配置号,然后在需要的地方引用就行,大大增加了项目的可维护性,而且降低了开发难度。 在这里插入图片描述

DI:[ Dependency injection] 依赖注入

  • 什么是DI?

    • 指的是应用程序在运行时依赖IOC容器来动态注入组建所需要的某个依赖对象。Spring的DI具体就是通过反射实现注入的,反射允许程序在运行的时候动态生成对象,执行对象的方法,改变对象的属性等。

      从Spring角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于调用者注入了它依赖的实例。

  • 谁依赖谁?

    • 应用程序依赖IOC容器
  • 为什么需要依赖?

    • 应用程序需要IOC容器来提供组建需要的外部资源
  • 谁注入谁?

    • IOC容器注入应用程序某个对象,即应用程序依赖的对象
  • 注入了什么?

    • 注入某个对象所需要的外部资源(包括对象、资源、常量数据)
  • 好处是什么?

    • 通过依赖注入,我们只需要通过简单的配置,而无需任何代码就可以指定目标需要的资源,完成自身的业务逻辑,二不需要关系具体的资源来自何处,由谁实现

总结

  • IOC(控制反转)是目标,DI(依赖注入)是实现控制反转的一种手段
  • 控制反转
    • 控制未反转时:由开发者来控制对象的创建
    • 控制反转:将创建对象的控制权交给了Spring,由Spring来控制对象的创建
  • 依赖注入:应用程序在运行时依赖IOC容器来动态注入组建所需的某个依赖对象

分类写个代码吧

这是一个订单类,依赖的是product(商品)和stock(库存)
传统方式
class OrderService{
	// 手动new依赖的其他对象
	private ProductService productService  = new ProductService ();
	private StockService stockService = new StockService ();
	// ... 等其他需要依赖的对象,如果依赖的有千百个,则需要new千百个对象,太繁琐
}
class ProductService {
	...
}
class StockService {
	...
}

Spring框架
  • 使用注解,简洁明了
@Service
class OrderService{
	// 不需要new了
	@Autowired
	private ProductService productService;
	@Autowired
	private StockService stockService;
	// ... 
}
@Service
class ProductService {
	...
}
@Service
class StockService {
	...
}
  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值