博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOC的概念这样理解更简单
阅读量:6706 次
发布时间:2019-06-25

本文共 2293 字,大约阅读时间需要 7 分钟。

IoC 的概念

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

IoC最常见的三种形式:

第一种:通过容器完成依赖关系的注入

  
          
<实现类实例化-->
     
     
    复制代码

第二种:属性注入 属性注入的方式介绍(三种方式) 在spring框架里面仅支持1.2.方法。 方法一:属性的set方法(最多使用) 方法二:带参数的构造方法 方法三:使用接口注入 (较少用)

第三种:接口注入

将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。为了采取接口注入的方式,必须先声明一个Arrangable接口:

`public interface Arrangable {      void injectGeli(GeLi geli);   }

然后,MoAttack实现Arrangable接口提供具体的实现 public class MoAttack implements Arrangable {       private GeLi geli;        //实现接口方法       public void injectGeli (GeLi geli) {             this.geli = geli;              }       public void cityGateAsk() {           geli.responseAsk("消费者");       }   }  `

明确 ioc 的作用: 削减计算机程序的耦合(解除我们代码中的依赖关系。

IoC容器的初始化:

1、高富帅IOC解剖

2、 设置资源加载器和资源定位: (1).AbstractApplicationContext的refresh函数载入Bean定义过程 (2).AbstractApplicationContext子类的refreshBeanFactory()方法 (3)AbstractRefreshableApplicationContext子类的loadBeanDefinitions方法 (4).AbstractBeanDefinitionReader读取Bean定义资源

3、资源加载器获取要读入的资源: (1).XmlBeanDefinitionReader加载Bean定义资源 (2).DocumentLoader将Bean定义资源转换为Document对象 (3).XmlBeanDefinitionReader解析载入的Bean定义资源文件 (4).DefaultBeanDefinitionDocumentReader对Bean定义的Document对象解析

4、BeanDefinitionParserDelegate解析Bean定义资源文件中的元素 (1).BeanDefinitionParserDelegate解析元素 (2).解析元素的子元素 (3).解析子元素

5、解析过后的BeanDefinition在IoC容器中的注册: DefaultListableBeanFactory向IoC容器注册解析后的BeanDefinition 

IoC容器的高级特性

1、介绍

2、Spring IoC容器的lazy-init属性实现预实例化: (1).refresh() (2).finishBeanFactoryInitialization处理预实例化Bean (3).DefaultListableBeanFactory对配置lazy-init属性单态Bean的预实例化

3、FactoryBean的实现: (1).FactoryBean的源码如下 (2).AbstractBeanFactory的getBean方法调用FactoryBean (3).AbstractBeanFactory生产Bean实例对象 (4).工厂Bean的实现类getObject方法创建Bean实例对象

4.BeanPostProcessor后置处理器的实现: (1).BeanPostProcessor的源码如下 (2).AbstractAutowireCapableBeanFactory类对容器生成的Bean添加后置处理器 (3).initializeBean方法为容器产生的Bean实例对象添加BeanPostProcessor后置处理器 (4).AdvisorAdapterRegistrationManager在Bean对象初始化后注册通知适配器

5.Spring IoC容器autowiring实现原理: (1).AbstractAutoWireCapableBeanFactory对Bean实例进行属性依赖注入 (2).Spring IoC容器根据Bean名称或者类型进行autowiring自动依赖注入 (3).DefaultSingletonBeanRegistry的registerDependentBean方法对属性注入

-END-复制代码

转载于:https://juejin.im/post/5cdc0cef51882535fc1dd875

你可能感兴趣的文章
[Angular] Using directive to create a simple Credit card validator
查看>>
C++11 右值引用和转移语义
查看>>
C语言 · 字符串的展开
查看>>
Exception的ToString()方法究竟返回的是什么
查看>>
linux下的静态库与动态库
查看>>
java-JProfiler(五)-监控性能
查看>>
百科知识 tar文件如何打开
查看>>
android设计的布局在阿拉伯语下界面错乱的解决方法
查看>>
获取断面线的范围
查看>>
WIFI: N, Legacy and AC
查看>>
SQLServer2012 (非)聚集索引存储探究
查看>>
Android Studio Share Project On Github
查看>>
数据库表的约束
查看>>
这个时代会残酷惩罚不肯改变的人
查看>>
HDU 1253 胜利大逃亡 NYOJ 523【BFS】
查看>>
UNITY中有Timer
查看>>
VIM 插入
查看>>
iOS 开发如何入门
查看>>
怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率...
查看>>
自然语言交流系统 phxnet团队 创新实训 个人博客 (十四)
查看>>