前言
- 还没想好要按照什么方式来写,先开个头吧,理解到哪里写哪里😝😝😝😂😂😂
- 也是初学者,想了解整理哪块知识,可以留言一起来探讨哦🌹🌹🌹
- 那就开始吧。先对简称做个记录吧~~
简称 | 全称 | |
---|---|---|
IOC | Inversion of Control | 控制反转 |
DI | Dependency injection | 依赖注入 |
DAO | Data Access Object | 数据访问对象 |
PO | Persisent Object | 持久化对象 |
POJO | Plain Old Java Object | 普通java对象 |
ORM | Object/Relational Mapping | 对象关系映射 |
VO | View Object | 视图对象 |
BO | Business Object | 业务对象 |
DTO | Data 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框架之后,我们只需要配置号,然后在需要的地方引用就行,大大增加了项目的可维护性,而且降低了开发难度。
- 【使用方法】:对象的实例不再是手动new了,将这个控制权交给了Spring框架来管理,由Spring来负责控制对象的生命周期(如创建、销毁)和对象之间的依赖关系
- 传统方式:
- 它是一种设计思想。当某个对象(调用者,A)需要调用另一个java对象(被调用者,即被依赖对象,B)时:
DI:[ Dependency injection] 依赖注入
-
什么是DI?
- 指的是应用程序在运行时依赖IOC容器来动态注入组建所需要的某个依赖对象。Spring的DI具体就是通过反射实现注入的,反射允许程序在运行的时候动态生成对象,执行对象的方法,改变对象的属性等。
从Spring角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于调用者注入了它依赖的实例。
- 指的是应用程序在运行时依赖IOC容器来动态注入组建所需要的某个依赖对象。Spring的DI具体就是通过反射实现注入的,反射允许程序在运行的时候动态生成对象,执行对象的方法,改变对象的属性等。
-
谁依赖谁?
- 应用程序依赖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 {
...
}