IOC的概念这样理解更简单

栏目: 后端 · 发布时间: 5年前

内容简介:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。IoC最常见的三种形式:

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

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

IoC最常见的三种形式:

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

<?xml version="1.0" encoding="UTF-8" ?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
        <实现类实例化-->  
   <bean id="geli" class="LiuDeHua"/>  
   <bean id="moAttack" class="com.baotao.ioc.MoAttack"   
         p:geli-ref="geli"/><!--通过geli-ref建立依赖关系-->  
</beans>  
复制代码

第二种:属性注入 属性注入的方式介绍(三种方式) 在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-
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析基础

算法设计与分析基础

Anany levitin / 潘彦 / 清华大学出版社 / 2007-1-1 / 49.00元

作者基于丰富的教学经验,开发了一套对算法进行分类的新方法。这套方法站在通用问题求解策略的高度,能对现有的大多数算法都能进行准确分类,从而使本书的读者能够沿着一条清晰的、一致的、连贯的思路来探索算法设计与分析这一迷人领域。本书作为第2版,相对第1版增加了新的习题,还增加了“迭代改进”一章,使得原来的分类方法更加完善。 本书十分适合作为算法设计和分析的基础教材,也适合任何有兴趣探究算法奥秘的读者......一起来看看 《算法设计与分析基础》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具