• Spring IoC 原理猜想(转载)


    负责的说,我没有用过Spring,更没有看过它的源码,只是和饼子堂的朋友聊了聊,但是我觉得我已经明白Spring的IoC了(早年也试图看过几本Spring相关的书,往往是浅尝辄止了,多亏这几次聊天了)。不过这样讲,很让人恼火,不过我觉得我确实知道Spring的内部是如何实现的了,今天先把它们写出来(我以为我知道了,但是题目还是 猜想)。

    另外,前几天,我在JavaEye上,见到了一篇关于Spring的帖子,大致也是讲原理的,因为那个时候我就打算写这篇blog了,于是我没有敢看,因为我怕,怕文章颠覆了我的想法,真是掩耳盗铃啊。等我写完了,我会仔细阅读以下的。

    Spring

    Spring的IoC,(我以为)其最大的作用就是解耦,在实际的应用中,使得各个组件之间保持松散。当然了,我显然不讲使用,而是讲原理。

    首先,先看下面的代码:

    IA是一个接口,A实现了该接口,当我们要使用A(作为IA实现)的功能的时候,最初的Java代码要这样写。

    IA a = new A();
    a.invokeMethod();

    这样,无疑使得调用方依赖于实现方了。

    而我们知道,依赖往往是不好的。如果调用方不知道实现class是A,那么就更好了。那么可以大致这样写。

    IA a = (IA) factory.getBean("A");

    这里,我还是把一些看起来是Spring的代码列出来吧,毕竟我的目的是让人清楚Spring做了什么,已经它是怎么做到的。

    现在,我们发现,调用方不依赖于A了,而耦合的仅仅是一个字符串“A”了。那么,这就非常好了。我实在想不出来还有比这更小的耦合方式,除非是习惯胜于配置学说至上者。

    那么这背后都需要做点什么呢,其实很简单,Spring所以号称是容器(当然了,不是Servlet容器),是因为它确实有容量~,它通过查找对象的配置项,把书写在Xml配置文件中的class,通过反射的方法创建出来,并按照<string, object>的方式,用一个HashMap进行键值对存储起来。实际上,它存储的可能不是需要的对象,而是这个对象的Factory,因为这样有利于Lazy-Loading吧?

    其实,IoC部分,就这么简单:调用方依赖Spring,而不是直接依赖于实现方;而Spring去通过配置文件,完成wiring,实现调用和实现直接的间接联系。

    想到Ferry了,其实也是使用了这种手法,只是Ferry关注更多的是对象之间解耦和通信,并且强调一对多的联系。

    好了,让我去搜搜那篇帖子吧。建议各位看这篇,而不是我这篇(显然我的篇幅很短)。

    http://www.javaeye.com/topic/493965

    可能是这篇。

    本文出处:http://www.cnblogs.com/healerkx/articles/1597614.html

  • 相关阅读:
    Expression Bland 入门视频(五) 了解对象面板和属性面板
    Windows Phone 一步一步从入门到精通
    “北京今年入冬的第一场雪”,纪念博客园写日志一年了
    2010年即将到来,用我的名字注册了的新域名 TerryFeng.com
    我要在黑龙江的老家,组织一个微软.Net俱乐部
    Windows 7 小工具 问题步骤记录器
    给弟弟起步学习软件开发(.Net 方向)的指导,博友们帮助看看,提些意见给他。
    今天是中国传统节日“重阳节”。也是爷爷的生日,今年80岁高龄。
    Windows 7 远程服务器管理工具 简体中文 下载
    新的技术和概念应该尽可能先去接受,而不是排斥。
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/1796732.html
Copyright © 2020-2023  润新知