您的位置:首页 > 编程语言 > Java开发

Spring的IoC(控制反转) 、DI(依赖注入)

2019-01-28 17:34 99 查看
版权声明:原创博客,转载请加上原博客链接 https://blog.csdn.net/weixin_43287508/article/details/86680569

Spring的IoC(控制反转) 、DI(依赖注入)

作用:为了解决对象之间的耦合度过高的问题。
Ioc—Inversion of Control ,即“控制反转”,不是什么技术,而是一种 设计思想 。在Java开发中,Ioc意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部直接控制。

1. Java面向对象

Java面向对象方法设计中,底层实现都是由多个个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。

图中描述的就是这样的一个齿轮组,所有的齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。对象之间的耦合关系是无法避免的,经常会出现对象之间的多重依赖性关系,必然会出现牵一发而动全身的情形。

2. 控制反转(IOC)

IOC原理实现:借助于“第三方”实现具有依赖关系的对象之间的解耦

3.IOC的另一种表达方式:依赖注入(DI)

DI是依赖注入,IOC的另一种表达方式:组件以一些预先定义好的方式(如:setter方法、构造器)接收来自容器的资源注入。创建对象实例时,为这个对象注入属性值或其它对象实例。

使用方法:

  • 属性注入(最常用)

1.通过set方法注入Bean的属性值或依赖的对象。
2.name属性:制定Bean属性set方法后的属性名。
3.value属性值:可以使(value)子节点指定属性值。

  • 构造器注入

1.通过构造器注入Bean属性值或依赖对象,它保证Bean实例在实例化后可以使用。
2.构造器注入在一样。

4.控制反转(IOC)和依赖注入(DI)的区别和联系

联系:控制反转(IOC)和依赖注入(DI)都是是spring核心思想的描述。

区别
1.它们是spring核心思想的不同方面的描述。
2.依赖注入和控制反转是对同一件事情的不同描述,描述的角度不同。
依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;
控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

5.Spring的IOC实现步骤解析:

  1. 定位到外部配置的Bean的资源文件。创建并且载入DefaultListableBeanFactory(即BeanFactory),根据DefaultListableBeanFactory创建XMLBeanDefinitionReader,用于读取xml配置文件信息。
  2. 解析外部配置的Bean的资源文件。创建BeanDefinitionDelegate代理类
  3. 初始化IOC容器
  4. 装配Bean
  5. 通过高级IOC容器(上下文)getBean获取程序需要的Bean

6.什么是Bean循环依赖

Bean循环依赖其实就是对象的相互依赖关系,循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。

7.Spring怎么解决循环依赖

不要使用基于构造函数的依赖注入,可以通过以下方式解决:

  1. 在字段上使用@Autowired注解,让Spring决定在合适的时机注入
  2. 用基于setter方法的依赖注入。
  3. 建立关系时把A、B、C创建的时候就丢入集合类。

spring中bean配置和bean注入请参照:
https://www.geek-share.com/detail/2672472441.html
Spring容器、Spring对象及SpringIOC请参照:
https://www.geek-share.com/detail/2733290982.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: