zoukankan      html  css  js  c++  java
  • 思考之spring的ioc

    控制反转 英语:Inversion of control,缩写为IoC
    我想很多同学都会思考过这样的一个问题,控制反转,什么地方反转了,是不是翻译的不对?
    这里插一句
    当年马云借着盖茨的嘴说:“互联网会改变世界。”其实是他自己说的,因为那时侯没有人认识马云,如果我说是翻译错误,大家肯定拍砖说我没理解。
    大家对spring都用了很多年,有喜欢看书的同学一定会看到过spring 技术内幕,非常棒的一本书,没看的看过这篇博客之后记得买一本。
    细心的同学可能会记得这样一句话

    早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依赖注入。--摘自维基百科
    其实他真的翻译的不够友好,所以后来才有了依赖注入(Dependency Injection,简称DI)。其实他们说的是一个意思。


    bean的历史及工场模式:
    最原始的bean是直接new出来的,后来出来了工场,把所有的bean放到工厂里统一生产,但还是写new,只不过这个new放在一个方法里了。再后来就是依赖注入帮了我们大忙,我们看不见new了。其实spring ioc就是一个大工厂 BeanFactory

    有好多同学说过接口有什么用?我不用接口一样写代码,我不用spring一样new.

    OOP的三个特性是封闭继承和多态,三个特性,继承和多态就占了两个,学java的人都应该看think in java。里面也强调了代码复用的三个方式是组合,继承和代理。这六点其实非常重要。
    think in java引入过一个名词叫做"客户端程序员",其实我们所有应用框架的人都是客户端程序员,那么框架的设计的要想到可扩展性和代码的复用性以及兼容性。想想spring就很容易理解,这些都需要接口。

      有接口就会有多态,有多态就需要修改new后边的代码,如果这些写到代码里,很多的话,重构就会带来问题。这是第一点;其二通过ioc可以实现bean的 统一管理,很方便,对bean的依赖关系一目了然,很容易把握全局,利于分析。所以ioc确实是非常有用的,是很棒的思想。


    从字面上理解,两个词,一个是依赖一个是注入。
    谭浩强说过这样一句话:“程序=算法+数据结构”
    所以分析Ioc我们从数据结构入手。它实际上有一个beanDefinition 的定义类,要实现注入首先我们要知道某个bean 的class及这个class的依赖关系,然后通过递归进行实例化并注入。
    大家都知道spring的bean有两种形式,singleton及prototype
    其实了解这些思想之后我们很容易想到其实就是通过对xml的解释来实生成bean的过程,如果是singleton那么我们直接缓存bean.如果是protoype我们缓存class.
    所以归结起来最核心的功能就是对xml的解析及递归调用的算法,感兴趣的同学可以参考我框架中的ioc 包,里边有具体实现。

  • 相关阅读:
    POJ2945 Find the Clones trie树
    BZOJ 3796 Mushroom追妹纸 哈希+二分(+KMP)
    java-web的mybatis的学习
    关于字符串split一些用法
    hive 中简单的udf函数编写
    hive 用户行为分析(活跃。启动,留存,回访,新增)的一些经典sql
    浏览收藏夹 看到了hadoop3.0 的改动
    pythonDay01
    关于java 操作linux命令的 一些相关
    需求中碰到的简单Map集合 key相同合并 value的思路
  • 原文地址:https://www.cnblogs.com/zhishan/p/3204660.html
Copyright © 2011-2022 走看看