文章结束给大家来个程序员笑话:[M]
首先恭喜守宏同学找到了自己心仪的工作,入职的事件终于尘埃落定,也算是一个新的开始吧。和守宏聊天的时候也说了很多有关工作的事件,畅想了以后美妙的未来,也想到了以后的各种困难。不说别的就是单单在北京住房这一项就够任何一个职场上的人忙上好几年的。英国天气无常,所以英国人寒暄的时候常常谈论天气;北京人居无定所,所以在北京下班的友人们大可以在寒暄的时候谈论租房;)。
“哎,你在哪租的房子?”
“我在西二旗那边,挺便宜的……”
“嗨,我之前在那边住过……”
很多在北京工作的友人第一要斟酌的就是留宿的问题。没办法“衣食住行”里面其他的都还好说,惟独“住”这件事在帝还是一个比拟特别的问题。也问过大多数在北京的友人,他们普遍的反应就是想省事就找中介,想省钱就自己找。不过现在好多了大家大部分都是在网上直接找到房东,然后商量价格进而签合同再然后就是入住了。不禁感叹,信息化发展了就是不一样,真的能感觉到有一台能上网的终端(无论是计算机还是手机)就拥有了天下。
想必读到这里已经有些人开始骂街了,这哪是Spring IOC道理剖析啊!这纯属是扯淡啊!!!上面铺垫终了,上面进入正题。
生活中的Spring IOC剖析
说到租房子这件事的时候猛然间就想到了Spring,类似58同城之类的发布信息的网站不就是Spring里面的容器么。网站上有很多别人提供的可以选择的房子(Bean),你所需要做的就是在没有租房子之前想好自己的要求,比如得能洗澡,能做饭,冬暖夏凉,距离下班的地方近(这俨然就是一个定义接口的进程),然后去网上检索寻找适合自己的房子,前提是房东已经自动的将房源信息公布到网上(公布房源信息的进程就是将Bean放入容器的进程,我们寻找房子的进程就类似于Spring中注入的进程,至于是直接注入还是JNDI注入,道理都是一样的,详细方式不一样而已)。找到房子了也就是注入成功了,找不到那只能抛出异常喽。主旨就是:只要条件满足,房子可以随意换(只要实现了接口,详细注入哪个实现类无关紧要)
基于有向图的Spring IOC剖析
从守宏提到聊面试题当中还是学到一些比拟有意思的货色,比如:Spring的数学道理----有向图。且不说这个论点对与不对,单就Spring和有向图这两个与“信息与计算迷信”专业息息相关的知识点来看,这个论题也是值得自己好好想一想的,上面就说说笔者对这句话的懂得。
为了方便叙说我们把Spring管理的每个Bean当作一个节点(假设有N个Bean,那么就有N个节点),于是这些Bean加上相互之间表示调用关系的有向边就组成了一个有向图。毫无疑问,有向图的边越多那么均匀来讲每个顶点之间的耦合度就越大,最大的情况为完整有向图,即任何两个节点之间都有两条有向边,此时每个顶点的度为2(N-1),也就是说每个Bean与其他的N-1个Bean有耦合,而且还是双向耦合。如下图所示(这里N=3)
尽人皆知,编程的进程中我们老是强调高内聚、低耦合,要想达到完整的无耦合(如下图)是不可能的。所以最优情况是坚持一种松耦合的状态,即在保证实现功能的前提下尽量减少类之间的耦合。我们可以利用接口达到这一目标,通过不同的实现类让调用方对详细实现不再关怀,从而达到松耦合的目标。
但是无论耦合如许“松散”详细的实现类还是需要new出来的,于是就得斟酌这个new的进程应该放在哪里才是最适合的。如果在每个Bean中都去new这个Bean需要的其他Bean,那么耦合的程度又回到了第一幅图的情况,那是没有意义的。聪慧的读者必定想到了如何解决这个问题:找一个中间人,在中间人那里实现new的进程,然后把new好的实例传递给需要这个实例的对象。这样的话一切问题就迎刃而解了,终究的效果如图所示
上图也就是Spring的数学描述,图中很清晰的表明了在使用Spring之后,恣意两个节点(Bean)之间的有向线段变成了0(确切的说不完整是0,因为恣意两个节点之间还是可以通过容器连接的),唯一和这些Bean有关系的是容器(无论谁需要什么货色都去找容器,尽量防止两个Bean之间直接打交道)也正因为如此Spring才达到了解耦的目标。
所以说,上面提到的“Spring的数学道理是根据有向图而来”这句话是有必定道理的。换个角度去看计算机,从生活,数学或者其他方面或许能把计算机看的更清晰。
文章结束给大家分享下程序员的一些笑话语录: 程序员的愿望
有一天一个程序员见到了上帝.上帝: 小伙子,我可以满足你一个愿望.程序员: 我希望中国国家队能再次打进世界杯.
上帝: 这个啊!这个不好办啊,你还说下一个吧!
程序员: 那好!我的下一个愿望是每天都能休息6个小时以上.
上帝: 还是让中国国家打进世界杯.