1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 控制反转IOC和依赖注入DI详解

控制反转IOC和依赖注入DI详解

时间:2019-06-16 09:57:26

相关推荐

控制反转IOC和依赖注入DI详解

本文介绍了Spring框架中的控制反转IOC和依赖注入DI,欢迎阅读,共同学习,一起进步。

Spring框架基础参考:深入学习Spring基础

文章目录

一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring框架使用(IoC)六.注入类型的三种方式

一.入门程序和IOC简介

依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例类型,创建后再注入调用者。由于Spring容器负责被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入。被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,控制权由应用代码转移到了外部容器,控制权发生了反转,因此称为控制反转

二.IOC-控制反转

IOC是 Inverse of Control 的简写,意思是控制反转。是降低对象之间的耦合关系的设计思想。通过IOC,开发人员不需要关心对象的创建过程,交给Spring容器完成。具体的过程是,程序读取Spring 配置文件,获取需要创建的 bean 对象,通过反射机制创建对象的实例。缺点:对象是通过反射机制实例化出来的,因此对系统的性能有一定的影响。优点:内存控制:统一管理对象,避免对象乱创建导致额外的内存开销。便于内存的优化。降低耦合度:便于项目的扩展、易于维护。如果IoC+接口情况下,删除任意实现类都不会导致程序编译出错。虽然运行到特定得代码会报错,但是其他代码在使用时不会有问题-----从侧面也反应出是松耦合。

举个简单的例子:你是一名租客要租房子,IOC就相当于房屋中介,他负责管理所有的房源,他给你提供,你要找的所有已经登记的房源对象的信息。你如果需要什么就会提供什么。

三.DI-依赖注入

Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。例如:我们通常在 Service 层注入它所依赖的 Dao 层的实例;在 Controller层注入 Service层的实例。

四. IOC和DI

IOC的别名,,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理对象变为由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection,DI)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI)和控制反转(IOC)是从不同的角度描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦.

五.Spring框架使用(IoC)

1.创建JavaBean2.将JavaBean配置给Spring容器进行管理

<bean id="book" class="com.it.spring.beans.Book"><property name="bookId" value="1"/><property name="bookName" value="Java程序设计"/><property name="bookPrice" value="20.20"/><property name="publishTime"><bean class="java.util.Date"/></property></bean>

3.初始化Spring容器加载Spring核心配置文件applicationContext.xml

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

4.通过Spring容器获取对象

Book book = (Book)context.getBean("book");

Spring IoC原理①首先通过ClassPathXmlApplicationContext类加载Spring的核心配置文件②解析核心配置文件applicationContext.xml,获取bean的配置信息③当我们从容器中获取对象时,Spring容器就会根据bean的id通过反射技术创建对象并完成属性的注入

六.注入类型的三种方式

①set方法通过property标签完成属性值的注入,实际上调用的就是对应属性的set方法属性注入时,简单类型和字符串类型的值都可以直接通过value属性指定对象类型可以有以下两种注入方式

<property id="..." name="objAttr"><bean class="package.Class"/></property>

<bean id="objRef" class="package.Class"/><property id="..." name="objAttr" ref="objRef"></property>

②构造方法就是在构造方法中(可以通过索引来确定参数的顺序 index=0、1)

<bean id="book3" class="com.it.spring.beans.Book"><constructor‐arg><value>3</value></constructor‐arg><constructor‐arg value="phython程序设计"/><constructor‐arg value="44.44" /><constructor‐arg ref="date"></constructor‐arg></bean>

通过index属性可以给构造器参数指定顺序,如果没有index属性,则所有参数的顺序必须于类中构造器参数一致。③接口注入The best investment for young people is to invest in yourself

.03.25 来自辰兮的第36篇博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。