zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    国外物联网平台(8):Telit
    国外物联网平台(7):FogHorn
    国外物联网平台(6):Electric Imp
    国外物联网平台(5):Exosite Murano
    国外物联网平台(4):Ayla Networks
    国内物联网平台(8):中移物联网开放平台OneNet
    Backbone入门讲解
    underscore.js库的浅析
    Backbone框架浅析
    Handlebars模板库浅析
  • 原文地址:https://www.cnblogs.com/purplefox2008/p/1796732.html
Copyright © 2011-2022 走看看