Spring的IoC(控制反转) 、DI(依赖注入)
Spring的IoC(控制反转) 、DI(依赖注入)
作用:为了解决对象之间的耦合度过高的问题。
Ioc—Inversion of Control ,即“控制反转”,不是什么技术,而是一种 设计思想 。在Java开发中,Ioc意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部直接控制。
描述: 不需要直接 new 一个对象的方式来创建对象,Spring IOC 容器来负责对象的生命周期和对象之间的关系
1. Java面向对象
Java面向对象方法设计中,底层实现都是由多个个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。
图中描述的就是这样的一个齿轮组,所有的齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。对象之间的耦合关系是无法避免的,经常会出现对象之间的多重依赖性关系,必然会出现牵一发而动全身的情形。
2. 控制反转(IOC)
IOC原理实现:借助于“第三方”实现具有依赖关系的对象之间的解耦
3.IOC的另一种表达方式:依赖注入(DI)
DI(Dependency Injection)是依赖注入,IOC的另一种表达方式:组件以一些预先定义好的方式(如:setter方法、构造器)接收来自容器的资源注入。创建对象实例时,为这个对象注入属性值或其它对象实例。
使用方法:
属性注入(最常用)
public class User{
private String name;
public void setName(String name) {
this.name= name;
}
}
1.通过set方法注入Bean的属性值或依赖的对象。
2.name属性:制定Bean属性set方法后的属性名。
3.value属性值:可以使(value)子节点指定属性值。
构造器注入
public class User{
private String name;
User(String name){
this.name= name;
}
}
1.通过构造器注入Bean属性值或依赖对象,它保证Bean实例在实例化后可以使用。
2.构造器注入在一样。
4.控制反转(IOC)和依赖注入(DI)的区别和联系
联系:控制反转(IOC)和依赖注入(DI)都是是spring核心思想的描述。
区别:
1.它们是spring核心思想的不同方面的描述。
2.依赖注入和控制反转是对同一件事情的不同描述,描述的角度不同。
依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;
控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
5.Spring的IOC实现步骤解析:
- 定位到外部配置的Bean的资源文件。创建并且载入DefaultListableBeanFactory(即BeanFactory),根据DefaultListableBeanFactory创建XMLBeanDefinitionReader,用于读取xml配置文件信息。
- 解析外部配置的Bean的资源文件。创建BeanDefinitionDelegate代理类
- 初始化IOC容器。
- 装配Bean。
- 通过高级IOC容器(上下文)getBean获取程序需要的Bean。
6.什么是Bean循环依赖
Bean循环依赖其实就是对象的相互依赖关系,循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。
7.Spring怎么解决循环依赖
不要使用基于构造函数的依赖注入,可以通过以下方式解决:
- 在字段上使用@Autowired注解,让Spring决定在合适的时机注入
- 用基于setter方法的依赖注入。
- 建立关系时把A、B、C创建的时候就丢入集合类。
spring中bean配置和bean注入请参照:
https://www.cnblogs.com/wuchanming/p/5426746.html
Spring容器、Spring对象及SpringIOC请参照:
https://blog.csdn.net/huang_yx/article/details/79735951
还没有评论,来说两句吧...