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

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

查看所有标签

猜你喜欢:

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

Web协议与实践

Web协议与实践

克里希纳穆尔蒂 (KrishnamurthyBalachander) / 范群波 / 科学出版社 / 2003-7 / 46.0

本书全面论述了传输Web内容的系统和协议,重点讲述了Web中业已成熟和稳定的技术,如TCP/IP协议及DNS技术、HITP/1.0的设计及其与TCP之间的交互;深入阐述了Web高速缓存技术和多媒体流播技术的最新技术动态;分析了Apache Web服务器和Squid代理;还探讨了通信量的分析和测量技术。书中使用了大量示例、技术发展水平报告以及案例分析来阐述Web的工作原理和各个组件之间的交互。本书是......一起来看看 《Web协议与实践》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

在线图片转Base64编码工具