Spring中的IOC/DI思想
2010-03-22 11:21
351 查看
IoC就是有容器(注意容器的概念,是应用程序的运行环境)控制程序之间的关系,传统的实现中是由程序代码控制程序之间的关系,即组件之间的依赖关系由容器在运行期决定,即容器(也就是运行环境)带台地将某种依赖关系注入到组件之中(白话理解是运行环境在程序执行过程中动态地将组件需要的资源提供给组件)。这也是控制反转的概念,即控制权(程序之间的依赖关系)由程序代码中转移到了外部容器;
依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,为系统搭建一个灵活,可扩展的平台,通过依赖注入和控制反转很好地实现组件之间的松耦合,从而利于组件的复用,实现真正意义上的即插即用。
依赖注入的几种实现类型:
1.接口注入
不常使用,不够灵活 典型:Apache Avalon
2.设置注入:通过类的setter方法完成依赖关系的设置;典型:Spring
3.构造注入:通过构造函数完成依赖关系的设定;典型:PicoContainer
几种注入模式的对比:
a. 设值注入
(1)习惯JavaBean开发的程序员通过设值注入更加直观,自然;
(2)若依赖关系比较复杂,则构造注入的构造函数会相当庞大,因为需要在构造函数中设定所有依赖关系,使用设值注入会更为简洁;
(3)对于某些第三方类库而言,可能要求组件必须提供一个默认的构造函数(如struts中的Action),此时构造注入就会体现出局限性;
b.构造注入
(1)构造期即创建一个完整、合法的对象;
(2)避免了繁琐的set方法编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读;
(3)依赖关系在构造时由容器一次性设定,组件在被创建之后处于相对不变的稳定状态,无需担心上层代码在调用过程中执行set方法对组件依赖关系进行非法改变,特别对于Singleton模式的组件而言,比较重要;
(4)由于组件之间的依赖关系仅在构造函数中表达,只有组件的创建者需要关心组件内部的依赖关系,对调用者而言,组件的依赖关系处于黑盒之中;
(5)通过构造子注入,可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的花的顺序可能非常重要。
以构造注入为主,辅之以设值注入,可以达到最好的依赖注入的效果,不过对于基于Spring Framework开发的应用而言,设值注入使用更加广泛。
依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,为系统搭建一个灵活,可扩展的平台,通过依赖注入和控制反转很好地实现组件之间的松耦合,从而利于组件的复用,实现真正意义上的即插即用。
依赖注入的几种实现类型:
1.接口注入
不常使用,不够灵活 典型:Apache Avalon
2.设置注入:通过类的setter方法完成依赖关系的设置;典型:Spring
3.构造注入:通过构造函数完成依赖关系的设定;典型:PicoContainer
几种注入模式的对比:
a. 设值注入
(1)习惯JavaBean开发的程序员通过设值注入更加直观,自然;
(2)若依赖关系比较复杂,则构造注入的构造函数会相当庞大,因为需要在构造函数中设定所有依赖关系,使用设值注入会更为简洁;
(3)对于某些第三方类库而言,可能要求组件必须提供一个默认的构造函数(如struts中的Action),此时构造注入就会体现出局限性;
b.构造注入
(1)构造期即创建一个完整、合法的对象;
(2)避免了繁琐的set方法编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读;
(3)依赖关系在构造时由容器一次性设定,组件在被创建之后处于相对不变的稳定状态,无需担心上层代码在调用过程中执行set方法对组件依赖关系进行非法改变,特别对于Singleton模式的组件而言,比较重要;
(4)由于组件之间的依赖关系仅在构造函数中表达,只有组件的创建者需要关心组件内部的依赖关系,对调用者而言,组件的依赖关系处于黑盒之中;
(5)通过构造子注入,可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的花的顺序可能非常重要。
以构造注入为主,辅之以设值注入,可以达到最好的依赖注入的效果,不过对于基于Spring Framework开发的应用而言,设值注入使用更加广泛。
相关文章推荐
- Spring IOC/DI 设计思想
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- (四)Spring核心思想 - IOC与DI
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧)
- Spring----01. 入门知识,IoC/DI
- spring ioc原理,IoC与DI-网摘
- Spring的IoC DI和AOP理解
- Spring的IOC和依赖注入DI理解
- Spring——IOC/DI理解
- 对Spring的IoC和DI最生动的解释
- 学习SSM框架笔记三:SpringIOC和DI
- spring+IOC+DI+AOP优点分析(一)
- Spring之IOC思想的理解和简单实现
- spring学习总结(二):IOC & DI 概述及 IOC 容器
- Spring核心概念理解-IoC容器、DI、AOP
- 关于Spring 的IOC 和 DI 的理解
- Spring特性之IOC与DI
- 对Spring的IoC和DI最生动的解释
- Spring容器的控制反转(IOC)和依赖注入(DI)