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-
复制代码

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

查看所有标签

猜你喜欢:

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

Linux程序设计

Linux程序设计

Neil Matthew、Richard Stones / 陈健、宋健建 / 人民邮电出版社 / 201005 / 99.00元

时至今日,Linux系统已经从一个个人作品发展为可以用于各种关键任务的成熟、高效和稳定的操作系统,因为具备跨平台、开源、支持众多应用软件和网络协议等优点,它得到了各大主流软硬件厂商的支持,也成为广大程序设计人员理想的开发平台。 本书是Linux程序设计领域的经典名著,以简单易懂、内容全面和示例丰富而受到广泛好评。中文版前两版出版后,在国内的Linux爱好者和程序员中也引起了强烈反响,这一热潮......一起来看看 《Linux程序设计》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

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

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具