zoukankan      html  css  js  c++  java
  • spring3

    【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3

    2.1.1  IoC是什么

    Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:

    谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

    为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

    用图例说明一下,传统程序设计如图2-1,都是主动去创建相关对象然后再组合起来:

     

    图2-1 传统应用程序示意图

    当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图2-2所示:

     

    图2-2有IoC/DI容器后程序结构示意图

     

    1.1.2  IoC能做什么

    IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

    其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

    IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

     

    2.1.3  IoC和DI

    DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

    理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

    谁依赖于谁:当然是某个容器管理对象依赖于IoC容器;“被注入对象的对象”依赖于“依赖对象”;

    为什么需要依赖:容器管理对象需要IoC容器来提供对象需要的外部资源;

    谁注入谁:很明显是IoC容器注入某个对象,也就是注入“依赖对象”;

    ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

    IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

    注:如果想要更加深入的了解IoC和DI,请参考大师级人物Martin Fowler的一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》,原文地址:http://www.martinfowler.com/articles/injection.html。

     

     转自私塾在线【http://sishuok.com/forum/blogPost/list/2427.html

     
    标签: spring

    JAVA视频全套在线学习

    1:从基础到高级到项目全套,全部课堂实录。
       
    2:课程的内容较深、偏重实用,而且特别注重Java编程思想的培养,你可以请内行的人士帮你评估。 
       
    3:内容很深入,讲解深入浅出,是目前最新、最好、最经典的Java视频。
     
    在线视频观看:www.sishuok.com

    02 2012 档案
     
    【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3
    摘要: 3.1.1 依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系、接口与接口之间的继承关系; 实现:表示类对接口的实现; 依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。 关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示; 聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联; 组合:属于是关联的...阅读全文
    posted @ 2012-02-21 17:33 kaitao1987 阅读(2) | 评论 (0) 编辑
     
    【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3
    摘要: 2.3.1 XML配置的结构一般配置文件结构如下:java代码:查看复制到剪贴板打印<beans><importresource=”resource1.xml”/><beanid=”bean1”class=””></bean><beanid=”bean2”class=””></bean><beanname=”bean2”class=””></bean><aliasalias="bean3"name="bean2"/><importresour阅读全文
    posted @ 2012-02-21 17:31 kaitao1987 阅读(7) | 评论 (0) 编辑
     
    【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3
    摘要: 2.2.1 IoC容器的概念IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、阅读全文
    posted @ 2012-02-21 17:30 kaitao1987 阅读(289) | 评论 (0) 编辑
     
    【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3
    摘要: 2.1.1 IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么阅读全文
    posted @ 2012-02-21 17:23 kaitao1987 阅读(27) | 评论 (0) 编辑
    01 2012 档案
     
    JAVA视频全套在线学习
    摘要: 1:从基础到高级到项目全套,全部课堂实录。2:课程的内容较深、偏重实用,而且特别注重Java编程思想的培养,你可以请内行的人士帮你评估。3:内容很深入,讲解深入浅出,是目前最新、最好、最经典的Java视频。在线视频观看:www.sishuok.com阅读全文
    posted @ 2012-01-16 21:55 kaitao1987 阅读(12) | 评论 (0) 编辑
     
    非常好的视频课程。
    摘要: 非常好的视频课程。Java初级教程http://sishuok.com/forum/posts/list/1029.htmlJava中级教程http://sishuok.com/forum/posts/list/0/1032.htmlJava高级教程-理论部分http://sishuok.com/forum/posts/list/0/1033.htmlJava高级教程-项目部分http://sishuok.com/forum/posts/list/0/1034.htmlOracle数据库开发及SQL基础实战http://sishuok.com/forum/posts/list/1042.htm阅读全文
    posted @ 2012-01-16 21:52 kaitao1987 阅读(13) | 评论 (1) 编辑
  • 相关阅读:
    不常用的cmd命令
    js获取宽度
    Marshaling Data with Platform Invoke 概览
    Calling a DLL Function 之三 How to: Implement Callback Functions
    Marshaling Data with Platform Invoke 之四 Marshaling Arrays of Types
    Marshaling Data with Platform Invoke 之一 Platform Invoke Data Types
    Marshaling Data with Platform Invoke 之三 Marshaling Classes, Structures, and Unions(用时查阅)
    Calling a DLL Function 之二 Callback Functions
    WCF 引论
    Marshaling Data with Platform Invoke 之二 Marshaling Strings (用时查阅)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2361876.html
Copyright © 2011-2022 走看看